私たちは不気味な着信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のパラメータであり、私は行方不明だ?