Как вывести файлы с паркетом с пачкой в ​​спарк? - PullRequest
0 голосов
/ 14 июня 2019

Фон

У меня есть 8k паркетных файлов, представляющих таблицу, которую я хочу поместить в отдельный столбец, создавая новый набор 8k паркетных файлов. Я хочу сделать это так, чтобы соединения из других наборов данных в столбце с сгруппированными данными не требовали перестановки. Документация, над которой я работаю, находится здесь:

https://spark.apache.org/docs/latest/sql-data-sources-load-save-functions.html#bucketing-sorting-and-partitioning

Вопрос

Какой самый простой способ вывода паркетных файлов, которые упакованы? Я хочу сделать что-то вроде этого:

df.write()
    .bucketBy(8000, "myBucketCol")
    .sortBy("myBucketCol")
    .format("parquet")
    .save("path/to/outputDir");

Но в соответствии с документацией, указанной выше:

Группировка и сортировка применимы только к постоянным таблицам

Полагаю, мне нужно использовать saveAsTable вместо save. Однако saveAsTable не идет по пути. Нужно ли создавать таблицу до вызова saveAsTable. В этом операторе создания таблицы я объявляю, где должны быть записаны файлы паркета? Если да, то как мне это сделать?

1 Ответ

0 голосов
/ 14 июня 2019
spark.sql("drop table if exists myTable");
spark.sql("create table myTable ("
    + "myBucketCol string, otherCol string ) "
    + "using parquet location '" + outputPath + "' "
    + "clustered by (myBucketCol) sorted by (myBucketCol) into 8000 buckets"
);
enlDf.write()
    .bucketBy(8000, "myBucketCol")
    .sortBy("myBucketCol")
    .format("parquet")
    .mode(SaveMode.Append)
    .saveAsTable("myTable");
...