首页 > 解决方案 > 无法将火花数据帧写入 gcs 存储桶

问题描述

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

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

标签: apache-sparkgoogle-cloud-platformgoogle-cloud-storage

解决方案


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

为了真正触发写入操作,您需要调用接口中的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

DataFrameWriterAPI 在其精神上与所有其他 Spark API 是一致的:它是惰性的。除非触发动作,否则不会执行任何操作。为此,实例的DataFrameWriter行为类似于构建器模式实现:随后调用format, option, modeet al. 只配置可能最终执行的写操作。配置操作后,您可以通过在此实例上调用save或类似方法来触发它。

同样,DataFrameWriter还允许您多次重用写入操作(例如,配置一组基本选项,然后调用两次以写入 parquet 和 csv 文件,例如;或写入不同的位置等)。


推荐阅读