Создание CSV с использованием dataset в Scala

#scala #csv #databricks

#scala #csv #блоки данных

Вопрос:

Я создал файл CSV из набора данных в scala. Он создает файл CSV, однако он имеет 0 байт.

при чтении через dbutils.fs.head(csv_path) выдает ошибку

«java.lang.Исключение IllegalArgumentException: невозможно открыть каталог: csv_path»

 ```result_dataset.coalesce(1)
   .write.format("com.databricks.spark.csv")
   .option("charset", "UTF-8")
   .option("header", "true")
   .option("sep",",")
   .save(csv_path)```
  

Кто-нибудь может мне помочь с этим? Я думаю, что CSV поврежден при создании файла.
Любое решение для этого?

Комментарии:

1. Ваша ошибка говорит сама за себя. csv_path это не файл с данными в нем, это родительский каталог, в котором Spark сохранит файл CSV. Без coalesce(1) этого фрейм данных записал бы много файлов csv, поскольку csv_path ожидалось бы, что каждый исполнитель Spark будет записывать свои разделы в свой собственный part-0001...csv файл в этой папке.

2. Обратите внимание, что при использовании coal race это все равно будет каталог, содержащий один файл CSV

3. Что такое «угольная гонка»? поскольку я ожидаю только один файл CSV. Как я могу этого добиться? Я новичок в Scala. Не могли бы вы помочь мне с этим?

Ответ №1:

Я не использовал Databricks около 1 года, но, насколько я помню, вы можете сохранить фрейм данных в CSV, подобный этому.

Запишите содержимое фрейма данных в формате CSV:

 df.write.csv("/data/home/csv")
  

Запишите весь фрейм данных в один CSV-файл:

 df.coalesce(1).write.csv("/data/home/sample.csv")
  

Просто для полноты картины, если вы хотите прочитать CSV в фрейм данных, вы можете сделать это следующим образом.

 # path to file
path = 'file:/databricks/driver/us.csv'

# load data using sqlContext
df = sqlContext.read.format("csv")
    .option("header","true")
    .option("inferSchema","true")
    .load(path)

# displat table format
display(df)