无法将Spark数据帧写入gcs存储桶

时间:2020-08-04 21:23:45

标签: apache-spark google-cloud-platform google-cloud-storage

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

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")

1 个答案:

答案 0 :(得分:2)

问题中的代码配置写入操作,但从不触发写入本身。

要真正触发写操作,您需要在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实例的行为类似于构建器模式的实现:对formatoptionmode等的后续调用。仅配置可能最终执行的写操作。配置完操作后,您可以通过在此实例上调用save或类似方法来触发它。

类似地,DataFrameWriter还允许您多次重复使用写操作(例如,配置一组基本选项,然后调用两次以写入镶木地板和csv文件;或者写入不同的位置,等等) )。