目前正在为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或任何格式写入数据时,尝试指定数据帧的分区数。要修复此问题,请使用repartition
或coalesce
df函数。
df.coalesce(1).write.format("com.databricks.spark.avro").save("/tmp/avroout")
从而在"/tmp/avroout"
中只写入一个文件
希望这能有所帮助!