4
我面臨以下困難: 我使用星火1.4.1,2.7.8的Python,和火花avro_2.10-1.0.0爲什麼將Dataframe轉儲爲Avro文件無法在Python中轉換bytearray?
我試圖使用存儲Python的字節數組在Avro的文件火花Avro的。我的目的是存儲與使用特定圖像編碼器編碼的圖像塊對應的字節鏈。
它無法在轉換異常:
org.apache.avro.file.DataFileWriter$AppendWriteException: org.apache.avro.UnresolvedUnionException: Not in union ["bytes","null"]:
下面是我爲重現問題做了一個樣本例如:使用
spark-submit --master local[1] --jars "spark-avro_2.10-1.0.0.jar" testBytearray.py
而且
from pyspark import SparkContext, SparkConf
from pyspark.sql import SQLContext, Row
import os
import tempfile
# Just setting name of the Spark app
conf = SparkConf().setAppName("pyspark test")
sc = SparkContext(conf=conf)
sqlContext = SQLContext(sc)
# build Data frame containing bytearrays (stupid)
data = map(lambda x: bytearray(str(x)), range(5))
rdd = sc.parallelize(data)
# convert data to SQL Row
rdd_row = rdd.map(lambda b: Row(val=b))
# create a DataFrame
df = sqlContext.createDataFrame(rdd_row)
df.registerTempTable('test')
# try to dump it
outputFile = os.path.join(tempfile.gettempdir(), 'test.avro')
df.write.format("com.databricks.spark.avro").save(outputFile)
這是啓動它在轉換中失敗!