【发布时间】:2017-01-20 20:18:25
【问题描述】:
将 Python 3 与 PySpark 和 Spark 1.6.0 结合使用。我读过saveAsTextFile() 创建的文件数等于RDD 分区数。但是,我专门将 RDD 合并到 16 个分区,但只有 1 个文件被写入 S3 (part-00000.gz)。我做错了什么?
这是我正在使用的代码:
conf = SparkConf()
sc = SparkContext(conf=conf)
sc.setLogLevel('WARN')
sc._jsc.hadoopConfiguration().set('fs.s3a.access.key', AWS_ACCESS_KEY)
sc._jsc.hadoopConfiguration().set('fs.s3a.secret.key', AWS_SECRET_KEY)
sqlContext = HiveContext(sc)
tbl = sqlContext.table(TABLE)
tbl.limit(1000000).toJSON().coalesce(16).saveAsTextFile(S3A_BUCKET_URL, compressionCodecClass="org.apache.hadoop.io.compress.GzipCodec")
原来的TABLE 是 Parquet 存储在大约 11,000 个文件中(我假设这等于 Spark 分区?)。当我不在整个表上使用 limit() 和 coalesce() 时,它确实会尝试在 S3 上创建数千个小文件,这需要很长时间,而且当我希望使用更少的大文件时就没有必要了。
【问题讨论】:
标签: python apache-spark amazon-s3 pyspark apache-spark-sql