如何为包含 30MB 以上数据的大型平面文件生成单个 .avro 文件

How can I generate a single .avro file for large flat file with 30MB+ data

目前正在为 10 kb 的文件生成两个 avro 文件,如果我对我的实际文件 (30MB+) 执行相同的操作,我将生成 n 个文件。

所以需要一个解决方案,即使源文件很大也只生成一个或两个.avro文件。

还有什么方法可以避免手动声明列名。

当前方法...

spark-shell --packages 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}

// Manual schema declaration of the 'co' and 'id' column names and types 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").save("/tmp/avroout")

// Note: /tmp/file.txt is input file/dir, and /tmp/avroout is the output dir

尝试在将数据写入 avro 或任何格式时指定数据帧的分区数。要解决此问题,请使用 repartitioncoalesce df 函数。

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

所以它只写一个文件 "/tmp/avroout"

希望对您有所帮助!