Невозможно записать фрейм данных искры в корзину gcs - PullRequest
2 голосов
/ 05 августа 2020

Задание отправлено и успешно запущено. Но данных в ведре просто нет. Как мне решить эту проблему?

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 Ответ

2 голосов
/ 05 августа 2020

Код из вопроса настраивает операцию записи, но никогда не запускает саму запись.

Чтобы действительно запустить операцию записи, вам нужно вызвать один из 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 согласован по своему духу со всеми другими API Spark: это это ленивый . Ничего не выполняется, если не запускается действие. Для этого экземпляры DataFrameWriter ведут себя аналогично реализации шаблона построителя: последующие вызовы format, option, mode и др. настройте только операцию записи, которая может быть выполнена. После настройки операции ее можно запустить, вызвав save или аналогичный метод в этом экземпляре.

Точно так же DataFrameWriter также позволяет повторно использовать операцию записи несколько раз (например, настроить базу набор опций, а затем вызовите дважды, например, для записи файлов parquet и csv; или для записи в разные места, et c.).

...