当前为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是输出目录
答案 0 :(得分:0)
尝试以avro或任何格式写入数据时,指定数据帧的分区数。要解决此问题,请使用repartition
或coalesce
df函数。
df.coalesce(1).write.format("com.databricks.spark.avro").save("/tmp/avroout")
因此它只能在"/tmp/avroout"
中写一个文件
希望这会有所帮助!