Ошибка при использовании искры 'save' не поддерживает разбивку - PullRequest
0 голосов
/ 14 октября 2018

У меня есть DataFrame, который я пытаюсь partitionBy столбца, отсортировать его по этому столбцу и сохранить в формате паркета с помощью следующей команды:

df.write().format("parquet")
  .partitionBy("dynamic_col")
  .sortBy("dynamic_col")
  .save("test.parquet");

Я получаю следующую ошибку:

reason: User class threw exception: org.apache.spark.sql.AnalysisException: 'save' does not support bucketing right now;

Разрешено ли save(...)?Разрешено только saveAsTable(...), что сохраняет данные в Hive?

Любые предложения полезны.

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Проблема в том, что sortBy в настоящее время (Spark 2.3.1) поддерживается только вместе с сегментированием, и его необходимо использовать в комбинации с saveAsTable, а также столбец сортировки сегментов не должен быть частью столбцов секционирования.

Таким образом, у вас есть два варианта:

  1. Не использовать sortBy:

    df.write
    .format("parquet")
    .partitionBy("dynamic_col")
    .option("path", output_path)
    .save()
    
  2. Использовать sortByс ведением и сохраните его через метасторское хранилище, используя saveAsTable:

    df.write
    .format("parquet")
    .partitionBy("dynamic_col")
    .bucketBy(n, bucket_col)
    .sortBy(bucket_col)
    .option("path", output_path)
    .saveAsTable(table_name)
    
0 голосов
/ 14 октября 2018

Попробуйте

df.repartition("dynamic_col").write.partitionBy("dynamic_col").parquet("test.parquet")
...