web-dev-qa-db-ja.com

PysparkでのJSONファイルの解析

私はPysparkにとても慣れていません。次のコードを使用してJSONファイルを解析してみました

from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
df = sqlContext.read.json("file:///home/malwarehunter/Downloads/122116-path.json")
df.printSchema()

出力は次のとおりです。

ルート| -_corrupt_record:文字列(null許容= true)

df.show()

出力は次のようになります

+--------------------+
|     _corrupt_record|
+--------------------+
|                   {|
|  "time1":"2...|
|  "time2":"201...|
|    "step":0.5,|
|          "xyz":[|
|                   {|
|      "student":"00010...|
|      "attr...|
|        [ -2.52, ...|
|        [ -2.3, -...|
|        [ -1.97, ...|
|        [ -1.27, ...|
|        [ -1.03, ...|
|        [ -0.8, -...|
|        [ -0.13, ...|
|        [ 0.09, -...|
|        [ 0.54, -...|
|        [  1.1, -...|
|        [ 1.34, 0...|
|        [ 1.64, 0...|
+--------------------+
only showing top 20 rows

Jsonファイルは次のようになります。

{
  "time1":"2016-12-16T00:00:00.000",

  "time2":"2016-12-16T23:59:59.000",

  "step":0.5,

   "xyz":[

    {
     "student":"0001025D0007F5DB",
      "attr":[
    [ -2.52, -1.17 ],
    [ -2.3, -1.15 ],
    [ -1.97, -1.19 ],
    [ 10.16, 4.08 ],
    [ 10.23, 4.87 ],
    [ 9.96, 5.09 ] ]
},
{
  "student":"0001025D0007F5DC",
  "attr":[
    [ -2.58, -0.99 ],
    [ 10.12, 3.89 ],
    [ 10.27, 4.59 ],
    [ 10.05, 5.02 ] ]
}
]}

これを解析して、このようなデータフレームを作成するのを手伝ってくれませんか。

Output Dataframe required

5
Jil Jung Juk

Spark> = 2.2

JSONリーダーにはmultiLine引数を使用できます。

spark.read.json(path_to_input, multiLine=True)

Spark <2.2

複数行のJSONファイルを読み取るために使用できる、ほぼ普遍的ですが、かなり高価なソリューションがあります。

  • SparkContex.wholeTextFilesを使用してデータを読み取ります。
  • ドロップキー(ファイル名)。
  • 結果をDataFrameReader.jsonに渡します。

データに他の問題がない限り、次のトリックを実行する必要があります。

spark.read.json(sc.wholeTextFiles(path_to_input).values())
15
zero323

同様の問題が発生しました。 SparkがJsonファイルを読み取っているとき、各行が個別のJSONオブジェクトであると想定しているため、きれいにフォーマットされたJSONファイルを読み込もうとすると失敗します。 Sparkが読み取っていたJSONファイルを縮小します。

1
Elsis