Zah*_*Mor 15 scala apache-spark apache-spark-sql spark-avro
我正试图从读取csv平面文件切换到spark上的avro文件.关注https://github.com/databricks/spark-avro 我使用:
import com.databricks.spark.avro._
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val df = sqlContext.read.avro("gs://logs.xyz.com/raw/2016/04/20/div1/div2/2016-04-20-08-28-35.UTC.blah-blah.avro")
Run Code Online (Sandbox Code Playgroud)
得到
java.lang.UnsupportedOperationException: This mix of union types is not supported (see README): ArrayBuffer(STRING)
Run Code Online (Sandbox Code Playgroud)
自述文件清楚地说明:
此库支持读取所有Avro类型,但复杂的联合类型除外.它使用以下从Avro类型到Spark SQL类型的映射:
当我尝试文本阅读相同的文件时,我可以看到架构
val df = sc.textFile("gs://logs.xyz.com/raw/2016/04/20/div1/div2/2016-04-20-08-28-35.UTC.blah-blah.avro")
df.take(2).foreach(println)
Run Code Online (Sandbox Code Playgroud)
{ "名称": "log_record", "类型": "记录", "字段":[{ "名称": "请求", "类型":{ "类型": "记录", "名称":"request_data " "字段":[{ "名称": "日期时间", "类型": "串"},{ "名称": "IP", "类型": "串"},{ "名称":" 主机" "类型": "串"},{ "名称": "URI", "类型": "串"},{ "名称": "REQUEST_URI", "类型": "串"},{" 名":" 引用者", "类型": "串"},{ "名称": "用户代理", "类型": "串"}]}}
<-------完整回复的摘录------->
因为我无法控制我收到这些文件的格式,我的问题是 - 是否有人测试并可以推荐?
我用gc dataproc
MASTER = yarn-cluster spark-shell --num-executors 4 --executor-memory 4G --executor-cores 4 --packages com.databricks:spark-avro_2.10:2.0.1,com.databricks:spark-csv_2 0.11:1.3.0
任何帮助将不胜感激.....