我要做的是将一些数据合并到s3上的文件夹中,并将数据(合并)保存在同一目录中。有可能吗?
我已经尝试过:
DF1.write.mode("overwrite").format("parquet").partitionBy("month").save("s3://path/db/table/")
但是似乎可以清除目录,然后才能对其进行读取和合并。
非常感谢。
答案 0 :(得分:0)
您可以使用多种不同的模式来保存数据,例如append:追加数据,overwrite:覆盖数据等等。
您可以在此处找到有关pyspark的更多信息:
https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.DataFrameWriter.save
但是,如果上面的信息没有用,那么如果您还可以详细说明“合并”数据的含义,并提供一些示例,则可能会有所帮助。
此致
Neeraj
答案 1 :(得分:0)
可以,但是在覆盖之前必须缓存源数据帧,否则从镶木地板中延迟加载数据会在写入同一位置时引起问题。
一个简单的例子
val sourceFile = "/tmp/testoverwrite/A"
val init = List(("A", 1), ("B", 1), ("C", 1)).toDF("X", "count")
init.write.mode(SaveMode.Overwrite).parquet(sourceFile)
val rand = Random
(0 to 3).foreach{_ =>
val A = spark.read.parquet(sourceFile).cache()
val _ = A.count() // Trigger cache
val B = (0 to 4).map(_ =>((rand.nextInt(10) + 65).toChar.toString, 1)).toDF("X", "count")
A.union(B).groupBy('X).agg(sum('count).as("count"))
.write.mode(SaveMode.Overwrite).parquet(sourceFile)
A.unpersist(true)
}
val A = spark.read.parquet(sourceFile).show()