无法将sparkDataframe写入gcs bucket

f8rj6qna  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(326)

作业已提交并成功运行。但是桶里没有数据。我该如何解决?

df = spark.createDataFrame([["Amy", "lily", 12], ["john", "tom", 34]]).toDF(*["first_name", "last_name", "age"])
df.write.format("parquet").partitionBy("age").option("path", "gs://my_bucket/my_table")
bcs8qyzn

bcs8qyzn1#

问题中的代码配置写操作,但从不触发写操作本身。
为了实际触发写操作,需要调用 save 中的函数 Writer 接口。
例如,以下内容将完成此工作:

df.write.format("parquet").partitionBy("age").option("path", "gs://my_bucket/my_table").save()

或:

df.write.format("parquet").partitionBy("age").save("gs://my_bucket/my_table")

甚至:

df.write.partitionBy("age").parquet("gs://my_bucket/my_table")

模式详细信息: df.write 返回 DataFrameWriter ; 以下是api:https://spark.apache.org/docs/2.4.6/api/scala/index.html#org.apache.spark.sql.dataframewriter DataFrameWriter api在其精神上与所有其他spark api是一致的:它是懒惰的。除非触发操作,否则不会执行任何操作。为此,需要 DataFrameWriter 行为类似于生成器模式实现:对 format , option , mode 仅配置可能最终执行的写入操作。一旦配置了操作,就可以通过调用 save 或类似的方法。
同样地, DataFrameWriter 还允许多次重用写入操作(例如,配置一组基本选项,然后调用两次来写入Parquet和csv文件;或者写到不同的地方等等)。

相关问题