У меня есть два сценария, один на R и короткий второй на pyspark
, который использует вывод.Я пытаюсь скопировать эту функциональность в первый скрипт для простоты.
Второй скрипт очень прост - прочитайте кучу CSV-файлов и сгенерируйте их как разделенный паркет:
spark.read.csv(path_to_csv, header = True) \
.repartition(partition_column).write \
.partitionBy(partition_column).mode('overwrite') \
.parquet(path_to_parquet)
Это должно быть одинаково просто в R, но я не могу понять, как соответствовать функциональности partitionBy
в SparkR
.Я получил это до сих пор:
library(SparkR); library(magrittr)
read.df(path_to_csv, 'csv', header = TRUE) %>%
repartition(col = .$partition_column) %>%
write.df(path_to_parquet, 'parquet', mode = 'overwrite')
Это успешно записывает один файл паркета для каждого значения partition_column
.Проблема в том, что испускаемые файлы имеют неправильную структуру каталогов;тогда как Python производит что-то вроде
/path/to/parquet/
partition_column=key1/
file.parquet.gz
partition_column=key2/
file.parquet.gz
...
R производит только
/path/to/parquet/
file_for_key1.parquet.gz
file_for_key2.parquet.gz
...
Я что-то упустил?функция partitionBy
в SparkR
появляется только для ссылки на контекст оконных функций, и я не вижу в руководстве ничего другого, что могло бы быть связано.Возможно, есть способ передать что-то в ...
, но я не вижу примеров в документации или поиске в Интернете.