如何为具有30MB +数据的大型平面文件生成单个.avro文件

时间:2018-11-06 01:01:46

标签: avro data-ingestion avro-tools

当前为10 kb的文件生成了两个avro文件,如果我对实际文件(30MB +)遵循相同的操作,则将有n个文件。

因此,即使源文件很大,也需要一种仅生成一个或两个.avro文件的解决方案。

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

当前方法...

  

spark-shell-打包com.databricks:spark-csv_2.10:1.5.0,com.databricks:spark-avro_2.10:2.0.1

     

导入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”)。save(“ / tmp / avroout”)

     

//注意:/tmp/file.txt是输入文件/目录,/ tmp / avroout是输出目录

1 个答案:

答案 0 :(得分:0)

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

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

因此它只能在"/tmp/avroout"中写一个文件

希望这会有所帮助!