2015-09-07 87 views
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) 

這是啓動它在轉換中失敗!

回答

4

我用火花的Avro的版本有誤。在建立最新版本之後,一切正常。