2016-11-17 11 views
1

コードhereをScalaバージョンからPySparkバージョンに変更しようとしています。ここで私が使用しているコードです:私は取得していますHadoop Streamingを介してPySparkのXmlファイルを読む

conf = SparkConf().setAppName("Parse Xml File") 
    sc = SparkContext(conf = conf) 
    sqlContext = HiveContext(sc) 

    sc._jsc.hadoopConfiguration().set('stream.recordreader.class', 'org.apache.hadoop.streaming.StreamXmlRecordReader') 
    sc._jsc.hadoopConfiguration().set('stream.recordreader.begin', '<page>') 
    sc._jsc.hadoopConfiguration().set('stream.recordreader.end', '</page>') 

    xml_sdf = sc.newAPIHadoopFile(xml_data_path, 
             'org.apache.hadoop.streaming.StreamInputFormat', 
             'org.apache.hadoop.io.Text', 
             'org.apache.hadoop.io.Text') 
    print("Found {0} records.".format(wiki_xml_sdf.count())) 

    sc.stop() 

エラーは次のとおりです。私はそれを動作させるために使用できるさまざまな入力フォーマット/設定が

py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.newAPIHadoopFile. 
: java.lang.ClassCastException: org.apache.hadoop.streaming.StreamInputFormat cannot be cast to org.apache.hadoop.mapreduce.InputFormat 

ありますか?

答えて

1

最も簡単な解決策は、spark-xmlパッケージを使用することです。あなたのケースではデータフレームにデータをロードするコードの下に(すべての文書は<page>で始まる):私はより一般的な何かを探していました

sqlContext.read.format('com.databricks.spark.xml') 
    .options(rowTag='page').load('samplexml.xml') 
+0

。私は基礎となるファイルが1行に1つの文書で分割されているとは思わない。これはspark-xmlが動作するために必要となるだろう。 – John

+0

spark-xmlは別々の行にドキュメントを必要としないので、大きな1行のファイルを作成することができます。やってみて :-) – Mariusz

関連する問題