2016-04-20 19 views
15

Tôi đang cố gắng chuyển từ đọc tệp phẳng csv sang tệp avro trên tia lửa. sau đây https://github.com/databricks/spark-avro tôi sử dụng:Đọc danh sách kết hợp không được hỗ trợ từ một tệp Avro trong Apache Spark

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") 

và nhận

java.lang.UnsupportedOperationException: This mix of union types is not supported (see README): ArrayBuffer(STRING) 

các bang tập tin readme rõ:

thư viện này hỗ trợ đọc tất cả các loại Avro, với trừ phức tạp loại công đoàn. Nó sử dụng các bản đồ sau đây từ các loại Avro với các loại SQL Spark:

khi tôi cố gắng để textread cùng một tập tin tôi có thể thấy schema

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) 

{ "tên": "log_record" , "type": "record", "fields": [{"name": "request", "type": {"type": "record", "name": "request_data", "fields": [{ "name": "datetime", "type": "string"}, {"name": "ip", "type": "string"}, {"name": "host", "type": "string "}, {" name ":" uri "," type ":" string "}, {" name ":" request_uri "," type ":" string "}, {" name ":" referer "," type ":" string "}, {" name ":" useragent "," type ":" string "}]}}

< ------- một đoạn trích của bài trả lời đầy đủ ------->

kể từ khi tôi có rất ít sự kiểm soát trên định dạng tôi nhận được những tập tin này trong, của tôi câu hỏi ở đây là - có cách nào mà một người nào đó được thử nghiệm và có thể đề xuất không?

tôi sử dụng dataproc gc với

TỔNG = sợi cụm spark vỏ --num-Chấp hành 4 --executor bộ nhớ 4G --executor-lõi 4 --packages com.databricks: spark -avro_2.10: 2.0.1, com.databricks: spark-csv_2.11: 1.3.0

bất kỳ trợ giúp sẽ được đánh giá rất cao .....

+0

http://stackoverflow.com/questions/23944615/how-can-i-load-avros-in-spark-using-the-schema-on-board-the-avro-files – Simon

+1

bạn có thể sử dụng newHadoopApi cho đọc tập tin avro - bạn sẽ cần sử dụng api lõi của tia lửa chứ không phải sql-api. bất kỳ lý do đặc biệt nào không sử dụng nó? –

Trả lời

2

Bạn tìm thấy bất kỳ giải pháp mà làm việc với Spark SQL. Mỗi cột trong Spark phải chứa các giá trị có thể được biểu diễn dưới dạng một đơn DataType do đó các loại công đoàn phức tạp đơn giản là không thể đại diện được với Spark Dataframe.

Nếu bạn muốn đọc dữ liệu như thế này, bạn nên sử dụng API RDD và chuyển đổi dữ liệu đã tải thành DataFrame sau đó.

Các vấn đề liên quan