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



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

因此需要一个解决方案,即使源文件很大,也只能生成一到两个.avro文件。

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

当前方法

spark-shell-packages com.databricks:spark-csv_2.10:1.5.0,com.databrics:spark-avro_2.10:2.0.1

导入org.apache.spark.sql.types。{StructType,StructField,StringType}

//"co"one_answers"id"列名和类型的手动架构声明val customSchema=结构类型(数组(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/avrout"(

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

在以avro或任何格式写入数据时,尝试指定数据帧的分区数。要修复此问题,请使用repartitioncoalescedf函数。

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

从而在"/tmp/avroout"中只写入一个文件

希望这能有所帮助!

相关内容

  • 没有找到相关文章

最新更新