pyspark是否可以从S3中的表中读取,处理数据然后保存在同一文件夹中?

时间:2018-12-17 16:10:52

标签: apache-spark pyspark

我要做的是将一些数据合并到s3上的文件夹中,并将数据(合并)保存在同一目录中。有可能吗?

我已经尝试过:

DF1.write.mode("overwrite").format("parquet").partitionBy("month").save("s3://path/db/table/")

但是似乎可以清除目录,然后才能对其进行读取和合并。

非常感谢。

2 个答案:

答案 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()