使用Spark流来从Kafka主题中读取Json数据 我使用DataFrame来处理数据,后来我希望将输出保存到HDFS文件中。问题是使用:
df.write.save("append").format("text")
产生许多文件,有些文件很大,有些甚至是0字节。
有没有办法控制输出文件的数量?另外,要避免"反对"问题,是否还有一种方法可以限制每个文件的大小,以便在当前达到特定大小/行数时将新文件写入?
答案 0 :(得分:2)
输出文件的数量等于Dataset
的分区数。这意味着您可以通过多种方式控制它,具体取决于上下文:
Datasets
,您可以使用读者特定参数控制输入Datasets
,您可以使用spark.sql.shuffle.partitions
参数控制分区数。coalesce
或repartition
。有没有办法限制每个文件的大小,以便在当前达到特定大小/行数时将新文件写入?
没有。内置编写器严格按1:1的关系。
答案 1 :(得分:1)
您可以使用尺寸估算器:
import org.apache.spark.util.SizeEstimator
val size = SizeEstimator.estimate(df)
接下来,您可以根据数据框的大小调整文件数量,并使用repatition或coalesce