apache-spark - 无法将火花数据帧写入 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")
解决方案
问题中的代码配置了写入操作,但从不触发写入本身。
为了真正触发写入操作,您需要调用接口中的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
et al. 只配置可能最终执行的写操作。配置操作后,您可以通过在此实例上调用save
或类似方法来触发它。
同样,DataFrameWriter
还允许您多次重用写入操作(例如,配置一组基本选项,然后调用两次以写入 parquet 和 csv 文件,例如;或写入不同的位置等)。
推荐阅读
- liquibase - 为 yaml 格式的更改日志文件运行 liquibase cli 更新时出错
- android - 如何将图像与 android 中的单选按钮一起放置在 android 的单选组中
- laravel - voyager laravel 框架的优缺点是什么?
- r - 绘制点按颜色分类的图片
- spring-boot - 带有 JSON 转换器的 Spring Data Redis 给出“属性路径不能为空或空”。
- android - Kotlin根据内部列表中的参数对列表进行排序
- unity3d - 无法从 Unity 流式传输到 Android 上的 XR Remote 应用程序
- javascript - 我的 javascript 代码抛出 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
- sql - 如何使用通配符查找寄存器,忽略 MS Access SQL 中通配符位置的空格?
- sql - MDX - 整个时间段的平均值,即使没有数据存在