#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)