Как я могу создать один файл .avro для большого плоского файла с данными более 30 МБ - PullRequest
0 голосов
/ 06 ноября 2018

в настоящее время генерируются два файла avro для файла размером 10 КБ. Если я последую за тем же самым с моим настоящим файлом (30 МБ +), я получу n файлов.

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

Также есть ли способ избежать ручного объявления имен столбцов.

текущий подход ...

spark-shell - пакеты com.databricks: spark-csv_2.10: 1.5.0, com.databricks: spark-avro_2.10: 2.0.1

import org.apache.spark.sql.types. {StructType, StructField, StringType}

// Ручное объявление схемы имен и типов столбцов 'co' и 'id' val customSchema = StructType (Array ( StructField ("ind", StringType, true), StructField ("co", StringType, true)))

val df = sqlContext.read.format ("com.databricks.spark.csv"). Option ("comment", "\" "). Option (" quote "," | "). Schema (customSchema) .load ( "/ TMP / file.txt")

df.write.format ( "com.databricks.spark.avro"). Сохранить ( "/ TMP / avroout")

// Примечание: /tmp/file.txt - это входной файл / dir, а / tmp / avroout - это выходной каталог

1 Ответ

0 голосов
/ 06 ноября 2018

Попробуйте указать количество разделов вашего фрейма данных при записи данных в формате avro или в любом другом формате. Чтобы исправить это, используйте функцию repartition или coalesce df. ​​

df.coalesce(1).write.format("com.databricks.spark.avro").save("/tmp/avroout")

чтобы он записывал только один файл в "/tmp/avroout"

Надеюсь, это поможет!

...