次の問題に直面しています: Spark 1.4.1、Python 2.7.8、および spark-avro_2.10-1.0.0 を使用しています
spark-avro を使用して Python バイト配列を avro ファイルに格納しようとしています。私の目的は、特定の画像エンコーダーを使用してエンコードされた画像のチャンクに対応する一連のバイトを格納することです。
変換例外で失敗します:
org.apache.avro.file.DataFileWriter$AppendWriteException: org.apache.avro.UnresolvedUnionException: Not in union ["bytes","null"]:
問題を再現するために作成したサンプル例を次に示します。
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)
これは、
spark-submit --master local[1] --jars "spark-avro_2.10-1.0.0.jar" testBytearray.py
そして、それは変換に失敗します!