Era*_*kon 20 json apache-spark spark-dataframe
我使用以下代码将spark DataFrame保存到JSON文件
unzipJSON.write.mode("append").json("/home/eranw/Workspace/JSON/output/unCompressedJson.json")
Run Code Online (Sandbox Code Playgroud)
输出结果是:
part-r-00000-704b5725-15ea-4705-b347-285a4b0e7fd8
.part-r-00000-704b5725-15ea-4705-b347-285a4b0e7fd8.crc
part-r-00001-704b5725-15ea-4705-b347-285a4b0e7fd8
.part-r-00001-704b5725-15ea-4705-b347-285a4b0e7fd8.crc
_SUCCESS
._SUCCESS.crc
Run Code Online (Sandbox Code Playgroud)
Gle*_*olt 23
如果您需要单个文件,则需要coalesce在调用write之前对单个分区执行操作,因此:
unzipJSON.coalesce(1).write.mode("append").json("/home/eranw/Workspace/JSON/output/unCompressedJson.json")
Run Code Online (Sandbox Code Playgroud)
就个人而言,我觉得输出文件的数量取决于你在调用之前拥有的分区数量相当令人讨厌write- 特别是如果你做了write一个partitionBy- 但据我所知,目前没有别的办法.
我不知道是否有办法禁用.crc文件 - 我不知道 - 但你可以通过在Spark上下文的hadoop配置上设置以下来禁用_SUCCESS文件.
sc.hadoopConfiguration.set("mapreduce.fileoutputcommitter.marksuccessfuljobs", "false")
Run Code Online (Sandbox Code Playgroud)
请注意,您可能还希望禁用以下内容生成元数据文件:
sc.hadoopConfiguration.set("parquet.enable.summary-metadata", "false")
Run Code Online (Sandbox Code Playgroud)
显然,生成元数据文件需要一些时间(参见此博客文章),但实际上并不重要(根据这一点).就个人而言,我总是禁用它们,我没有任何问题.
小智 7
忽略 .write 上的 crc 文件
val hadoopConf = spark.sparkContext.hadoopConfiguration
val fs = org.apache.hadoop.fs.FileSystem.get(hadoopConf)
fs.setWriteChecksum(false)
Run Code Online (Sandbox Code Playgroud)
上面的答案只是一点更新。要禁用 crc 和 SUCCESS 文件,只需在 Spark 会话中设置属性,如下所示(示例)
spark = SparkSession \
.builder \
.appName("Python Spark SQL Hive integration example") \
.config("spark.sql.warehouse.dir", warehouse_location) \
.enableHiveSupport() \
.getOrCreate()
spark.conf.set("mapreduce.fileoutputcommitter.marksuccessfuljobs", "false")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14956 次 |
| 最近记录: |