我正在尝试将列追加到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.
任何关于错误的建议都会有所帮助
答案 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,以避免执行上述过程。