无需重写/随机播放,即可重写实木复合地板数据的投影投影

时间:2018-07-11 12:38:35

标签: apache-spark

我的任务是在更改后的模式下再次在压缩的镶木地板文件中写入大约TB的数据(每天分成200多个分区)。 基本上,我使用spark sql将架构调整为新格式。有些列被强制转换,另一些则被重新计算或拆分。

然后我希望每天将结果保存在尽可能少的文件中 repartition($ year,$ month,$ day).write.partitionBy(year,month,day).parquet(..)

数据源是由相同的y,m,d列组成的分区表。 因此,从理论上讲,它应该不需要任何交换步骤就能工作,只需花一天的时间将其写入更改后的数据/架构中的新位置即可。

我认为整个工作应该是网络绑定的,对s3的读写。

那没有用。 Spark EMR集群首先尝试读取所有数据,对数据进行随机排序,然后将其写回。 那是一个问题,因为我没有建立一个庞大的集群。最终,数据无法容纳到RAM中,然后,如果磁盘空间中装有随机播放的临时文件,则形成交换步骤。

我最终只是将工作分拆成缓慢而低效的串行步骤。永远花了。

TL; DR; 基本上,这只是一种投影,没有联接,只有分区的合并。

读取数据->项目列->写入数据(已分区) 我想避免DAG中的交换步骤,否则这是不可能用spark。

进行的。

0 个答案:

没有答案