Próbuję przejść od czytania płaskich plików csv do plików avro na iskrze. następujące https://github.com/databricks/spark-avro używam:Przeczytaj nieobsługiwaną mieszankę typów złącz z pliku Avro w 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")
i dostać
java.lang.UnsupportedOperationException: This mix of union types is not supported (see README): ArrayBuffer(STRING)
stany plików readme wyraźnie:
Ta biblioteka obsługuje przeczytaniu wszystkich Avro typów, z wyjątkiem kompleksu typy związków. Wykorzystuje następujące odwzorowanie Avro rodzajów typów SQL Spark:
gdy próbuję textread tego samego pliku widzę schematu
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)
{ "name": "log_record" , "type": "record", "fields": [{"name": "request", "type": {"type": "record", "name": "request_data", "fields": [{ "nazwa": "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 "}]}}
< ------- fragment pełnej odpowiedzi ------->
ponieważ mam małą kontrolę nad formatem dostaję te pliki, mój Pytanie tutaj brzmi - czy istnieje obejście, które ktoś przetestował i czy może polecić?
użyć gc dataproc z
master = przędzy klastra zapłonem powłoki --num-wykonawców 4 --executor pamięć 4G --executor rdzeni 4 --packages com.databricks: zapłonowe -avro_2.10: 2.0.1, com.databricks: zapłonie csv_2.11: 1.3.0
każda pomoc będzie bardzo mile widziane .....
http://stackoverflow.com/questions/23944615/how-can--load-avros-in-spark-using-the-schema-on-board-the-avro-files – Simon
możesz użyć newHadoopApi dla czytanie plików avro - będziesz musiał użyć core api iskry, a nie sql-api. jakiś szczególny powód, aby go nie używać? –