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")
如果您经常更新,则会创建大量文件(也可能是空文件)
要克服这个问题,您需要
- 读取以前的数据并将其追加
- 存储在临时目录中
- 删除原始目录并
- 将临时目录重命名为原始目录