2016-08-10 4 views
2

私たちは不気味な着信jsonデータに対処しなければならないという不幸な状況にあり、Spark 2.0(pyspark)がjsonキー内で引用符を処理する方法に違いがあることを発見しました。スパーク2.0がjsonをキーフレーム内の引用符付きのデータフレームに読み込んでいます - スパーク1.6とは異なる動作...バグ?

我々はサンプルファイル(sample.json)として、次を使用している場合:スパーク1.6.2で

{"event":"abc"} 
{"event":"xyz","otherdata[\"this.is.ugly\"]":"value1"} 

、私たちは次のことを実行し、結果を得ることができます。

from pyspark import SparkConf 
from pyspark.sql import SQLContext 
conf = SparkConf() 
conf.setAppName('temp_quotes') 

sc = SparkContext(conf=conf) 
sqlContext = SQLContext(sc) 

data =  sqlContext.read.json("sample.json") 
data.printSchema() 

結果があります:

root 
|-- event: string (nullable = true) 
|-- otherdata["this.is.ugly"]: string (nullable = true) 

そして、私たちがショーを行うとき、私たちはデータを見ることができます:

data.show(2) 

+-----+-------------------------+ 
|event|otherdata["this.is.ugly"]| 
+-----+-------------------------+ 
| abc|      null| 
| xyz|     value1| 
+-----+-------------------------+ 

しかし、スパーク2.0で同じコードを実行すると、同じスキーマを示しています。

from pyspark import SparkConf 
from pyspark.sql import SQLContext 
conf = SparkConf() 
conf.setAppName('temp_quotes') 

sc = SparkContext(conf=conf) 
sqlContext = SQLContext(sc) 

data =  sqlContext.read.json("sample.json") 
data.printSchema() 

root 
|-- event: string (nullable = true) 
|-- otherdata["this.is.ugly"]: string (nullable = true) 

をしかしショーは失敗します。

data.show(2) 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/spark/python/pyspark/sql/dataframe.py", line 287, in show 
    print(self._jdf.showString(n, truncate)) 
    File "/usr/lib/spark/python/lib/py4j-0.10.1-src.zip/py4j/java_gateway.py", line 933, in __call__ 
    File "/usr/lib/spark/python/pyspark/sql/utils.py", line 69, in deco 
    raise AnalysisException(s.split(': ', 1)[1], stackTrace) 
pyspark.sql.utils.AnalysisException: u'Unable to resolve otherdata["this.is.ugly"] given [event, otherdata["this.is.ugly"]];' 

はこのバグですか、そこには、Spark 2.0のパラメータであり、私は行方不明だ?

答えて

関連する問題