0

为什么在sparkSql中创建很多Parquet文件?我们能不能限制Parquet输出文件?为什么创建这么多Parquet文件?我们能不能限制Parquet输出文件?

+1

请更好地解释你的问题。你是如何创建这些文件的?请提供一个完整的最小可验证示例:http://stackoverflow.com/help/mcve。还请解释你到底想要做什么?为什么文件数量有问题?这里有一个进球号码吗?也许这个问题是与别的东西(http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) –

+0

谢谢你的回复,我有ETL工作写在火花1.6我们要存储翻译数据。我们的要求非常简单,我们希望从这个实木复合地板文件中搜索一个字符串(大小约200GB以上)。我们正在使用下面的代码: test.saveAsParquetFile(locationfile); 通过使用这种方法Parquet创建大量文件,如果我们有很多文件,它很容易理解,所以搜索将需要时间,因为IO会增加。我们需要执行一些优化技术,以便我们的搜索可以更好地执行。 –

回答

0

一般而言,当您写入实木复合地板时,它将为每个分区写入一个(或更多取决于各种选项的)文件。如果要在写入之前减少数据帧上可以调用的文件数量。例如:

df.coalesce(20).write.parquet(filepath) 

当然,如果你有各种选择(例如partitionBy),文件的数量可以显着增加。

另外请注意,如果你合并到很少的分区,这可能会变得非常慢(这是因为在分区之间复制数据,并且因为如果你足够小的话就减少了并行性)。如果单个分区中的数据太大(当分区自然变大时),您也可能会遇到OOM错误。

几件事情需要注意:

  • saveAsParquetFile因为1.4.0版本depracated。改为使用write.parquet(路径)。
  • 根据您的使用情况,在镶木地板文件上搜索特定字符串可能不是最有效的方法。
+0

任何人都可以告诉我在使用SparkSql编写parquetfile时,默认的原始组大小是多少? –

相关问题