将列追加到HDFS中的现有CSV文件

时间:2018-10-02 19:21:18

标签: scala apache-spark hdfs

我正在尝试将列追加到HDFS中的现有CSV文件中。

脚本1:

someDF1.repartition(1).write.format("com.databricks.spark.csv").mode("append").option("sep", "\t").option("header","true").save("folder/test_file.csv")

错误:

org.apache.hadoop.fs.FileAlreadyExistsException: Parent path is not a directory.

任何关于错误的建议都会有所帮助

1 个答案:

答案 0 :(得分:0)

CSV文件不支持架构演进。因此,基本上,您要做的就是读取目标路径中的全部数据,然后在此数据框中添加具有默认值的新列。

val oldDF = dfWithExistingData.withColumn("new_col", lit(null))

然后可以将此数据框与新数据集合并或合并。

val targetData = oldDF.union(newDF)

然后您可以以覆盖模式将数据写回到目标路径。

targetData
.repartition(1)
.write
.format("com.databricks.spark.csv")
.mode("overwrite")
.option("sep", "\t")
.option("header","true")
.save("folder")

替代:您可以切换到其他支持架构演变的文件格式,例如Parquet,以避免执行上述过程。