2016-05-18 7 views
3

私はavroファイルとしてデータフレームを保存しようとしています。私は、多くのネストされたレイヤーを持つxmlファイルを読み込んでいます。データフレームとして格納します。データフレームは正常に格納されます。 xmlには、@ nso、@ ns1、@ ns2などの多くの名前空間ヘッダーがあります。これらは、データフレーム内のヘッダーになります。私はアブロファイルとして保存しようとすると、それは私に、このエラーを与える:「スレッドの例外 『メイン』 org.apache.avro.SchemaParseException:不正な初期文字:NS0 @」sparkでデータフレームをフィルタリングし、avroとして保存する

val conf = new SparkConf() 
     .setMaster("local[2]") 
     .setAppName("conversion") 
val sc = new SparkContext(conf) 

val sqlContext = new SQLContext(sc) 

val df = sqlContext.read 
    .format("com.databricks.spark.xml") 
    .option("rowTag", "Stuff") 
    .load("sample.xml") 

df.printSchema() 
df.show() 

df.write 
    .format("com.databricks.spark.avro") 
    .save("output") 

答えて

1

有効アブロ名has to start with a letter or an underscoreので、属性から生成された列の名前を変更するか、代替プレフィックスを指定します。 spark-csvあなたはattributePrefixプロパティを使用して属性の接頭辞を設定することができます:

val df = sqlContext.read 
    .format("com.databricks.spark.xml") 
    .option("rowTag", "Stuff") 
    .option("attributePrefix", "attr_") // or some other prefix of your choice 
    .load("sample.xml") 
+0

私は、このソリューションを試してみました。これは、xmlのxmlnsヘッダーを置き換えます。しかし、ネストされたレイヤーのns0、ns1要素がまだ問題を抱えている場合。それらを置き換える方法を知っていますか? – Defcon

+0

失敗した小さな入力例を教えてください。それはバグのように思えます。 – zero323

+0

OK、残りの問題は 'ns1:PublicID'も': 'のために有効な名前ではないということですか?もしそうなら、名前を変更する以外の解決策はないと思いますが、これはネストされたオブジェクトでは正確ではありません。 – zero323

関連する問題