私は、1行に1つのJSONオブジェクトとしてフォーマットされた一連のファイルを入力として持っています。しかし、問題は、これらのJSONオブジェクトの1つのフィールドがJSONエスケープ文字列であることです。私たちは「escapedJsonPayload
は」文字列であると私はそれが構造体である必要が見ることができるように例Spark - JSONエスケープされたStringフィールドをDataFramesのJSONオブジェクトとして解析する方法
{"clientAttributes":{"backfillId":null,"clientPrimaryKey":"abc"},"escapedJsonPayload":"{\"name\":\"Akash\",\"surname\":\"Patel\",\"items\":[{\"itemId\":\"abc\",\"itemName\":\"xyz\"}"}
は、それが
val df = spark.sqlContext.read.json("file:///home/akaspate/sample.json")
df: org.apache.spark.sql.DataFrame = [clientAttributes: struct<backfillId: string, clientPrimaryKey: string>, escapedJsonPayload: string]
以下のようにデータフレームを作成しています。
注:私はStackOverflowの中で同様の質問を持って、それに続く(How to let Spark parse a JSON-escaped String field as a JSON Object to infer the proper structure in DataFrames?)が、それは私を与えている "[_corrupt_record:文字列]" 私は以下試してみました
が
val df = spark.sqlContext.read.json("file:///home/akaspate/sample.json") (Work file)
ステップ
val escapedJsons: RDD[String] = sc.parallelize(Seq("""df"""))
val unescapedJsons: RDD[String] = escapedJsons.map(_.replace("\"{", "{").replace("\"}", "}").replace("\\\"", "\""))
val dfJsons: DataFrame = spark.sqlContext.read.json(unescapedJsons) (This results in [_corrupt_record: string])
すべてのヘルプは、あなたが提供しているすべてのJSONの
この回答はあなたの問題を解決していますか? – himanshuIIITian
詳細な回答はhimanshuIIITian @に感謝します。 「最初に提供したJSONの形式が間違っています(構文的に)」という点については、この入力ファイルを管理することはできず、アップストリームサービスからこの形式を取得しています。したがって、 "escapedJsonPayload"のように表示されます: "{\" name \ ":\" Akash \ "}"。 スパークでこれを処理する方法をお知らせください。 –
Simple ... JSON値に 'replace(" \\ "、" ")'を適用するだけです。私の答えに言及したように。 – himanshuIIITian