Apache spark 使用Spark在同一路径中多次保存avro

Apache spark 使用Spark在同一路径中多次保存avro,apache-spark,Apache Spark,我使用(对于Spark 1.5.5.2)将从ElasticSearch获取的数据帧作为Avro保存到HDFS中。在对数据帧进行一些处理后,我使用以下命令将数据保存在HDFS上: df.write.avro("my/path/to/data") 一切正常,我可以使用Hive读取数据。当时我面临的最大问题是,我不能将两次数据写入同一路径(例如,使用“my/path/to/data”作为输出运行脚本两次)。只要我需要以增量方式添加数据,我如何解决这个问题?我想有一些解决办法,比如 每天更改输出目录

我使用(对于
Spark 1.5.5.2
)将从ElasticSearch获取的数据帧作为Avro保存到HDFS中。在对数据帧进行一些处理后,我使用以下命令将数据保存在HDFS上:

df.write.avro("my/path/to/data")
一切正常,我可以使用Hive读取数据。当时我面临的最大问题是,我不能将两次数据写入同一路径(例如,使用
“my/path/to/data”
作为输出运行脚本两次)。只要我需要以增量方式添加数据,我如何解决这个问题?我想有一些解决办法,比如

  • 每天更改输出目录(创建分区),或
  • 将数据保存在tmp文件夹中,然后将其插入“主”表中

但是我想知道我是否能找到一种方法来解决Spark上的这个问题。

您应该提供一个合适的模式。如果要替换现有数据,请覆盖:

df.write.mode("overwrite").avro("my/path/to/data")
如果要添加,请附加:

df.write.mode("append").avro("my/path/to/data")

您应该提供适当的模式。如果要替换现有数据,请覆盖:

df.write.mode("overwrite").avro("my/path/to/data")
如果要添加,请附加:

df.write.mode("append").avro("my/path/to/data")

如果您的数据不经常更新,那么Append也可以正常工作

df.write.mode(SaveMode.Append).avro("outputpath")
如果您经常更新,则会创建大量文件(也可能是空文件) 要克服这个问题,您需要

  • 读取以前的数据并将其追加
  • 存储在临时目录中
  • 删除原始目录并
  • 将临时目录重命名为原始目录

希望这对您有所帮助

如果您的数据不经常更新,那么Append也可以正常工作

df.write.mode(SaveMode.Append).avro("outputpath")
如果您经常更新,则会创建大量文件(也可能是空文件) 要克服这个问题,您需要

  • 读取以前的数据并将其追加
  • 存储在临时目录中
  • 删除原始目录并
  • 将临时目录重命名为原始目录
希望这有帮助

谢谢!:)很抱歉问了这个小问题,我刚开始和SparkThank合作(谢谢!)很抱歉这个小问题,我刚开始与Spark合作