更新镶木地板文件的最佳方式,取决于它自己的数据

时间:2017-05-30 14:07:05

标签: apache-spark pyspark parquet

我有一个镶木地板文件,我按用户存储了一些指标。 到目前为止,我已经完全重新计算了这个文件,但是计算很复杂,所以我想覆盖特定的列。

有两种方法:

  • 添加新行
  • 添加列

因此,例如在添加新行时,我想做类似的事情:

df_old = sqlContext.read.parquet(myfile)
df_new = df_other_src.select(...)
df_new = df_old.alias("o").join(df_new.alias("n"), "o.id == n.id", "right")\
  .where("o.id is NULL").select("n.id")
df_new.write.parquet(myfile,mode="append")

问题是这不起作用,因为df_new取决于df_old。解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

几天前,我遇到了这个问题。所以我做的是

  1. 阅读旧的镶木地板文件和新数据
  2. 合并这些数据并创建新的Dataframe
  3. 将此Dataframe写入任何临时目录
  4. 删除旧目录并将临时目录重命名为旧目录
  5. 如果我没有这样做,每次作业运行时都会创建大量空白且小的文件。

    我希望这也为你提供了想法。