2017-04-03 10 views
0

JSONファイルには多くの行があり、すべての行はこのように見えます。スパーク - 追加のテキストを含むjsonファイル

Mon Jan 20 00:00:00 -0800 2014, {"cl":"js","ua":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36","ip":"76.4.253.137","cc":"US","rg":"NV","ct":"North Las Vegas","pc":"89084","mc":839,"bf":"402d6c3bdd18e5b5f6541a98a01ecc47d698420d","vst":"0e1c96ff-1f4a-4279-bfdc-ba3fe51c2a4e","lt":"Sun Jan 19 23:59:59 -0800 2014","hk":["memba","alyson stoner","memba them","member them","member them 80s","missy elliotts","www.tmzmembathem","80s memba then","missy elliott","mini"]}, 

/明確にするために、追加のスペース/

{"v":"1.1","pv":"7963ee21-0d09-4924-b315-ced4adad425f","r":"v3","t":"tmzdtcom","a":[{"i":15,"u":"ll-media.tmz.com/2012/10/03/100312-alyson-stoner-then-480w.jpg","w":523,"h":480,"x":503,"y":651,"lt":"none","af":false}],"rf":"http://www.zergnet.com/news/128786/stars-whove-changed-a-lot-since-you-last-saw-them","p":"www.tmz.com/photos/2007/12/20/740-memba-them/images/2012/10/03/100312-alyson-stoner-then-jpg/","fs":true,"tr":0.7,"ac":{},"vp":{"ii":false,"w":1915,"h":1102},"sc":{"w":1920,"h":1200,"d":1},"pid":239,"vid":1,"ss":"0.5"} 

私は次のことを試してみました:

方法1:ここ

val value1 = sc.textFile(filename).map(_.substring(32)) 

val df = sqlContext.read.json(value1) 

私がしようとしていますテキストwを省略するhichは行頭にあります。この場合、各行から最初のjsonオブジェクトのみを取得しています。

です:

{"cl":"js","ua":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36","ip":"76.4.253.137","cc":"US","rg":"NV","ct":"North Las Vegas","pc":"89084","mc":839,"bf":"402d6c3bdd18e5b5f6541a98a01ecc47d698420d","vst":"0e1c96ff-1f4a-4279-bfdc-ba3fe51c2a4e","lt":"Sun Jan 19 23:59:59 -0800 2014","hk":["memba","alyson stoner","memba them","member them","member them 80s","missy elliotts","www.tmzmembathem","80s memba then","missy elliott","mini"]} 

方法2:

val df = sqlContext.read.json(sc.wholeTextFiles(filename).values) 

この場合、私はちょうど壊れたレコードのような出力を取得しています。

ここで問題がどのようなものか、この種のファイルを解析する方法を教えてください。

答えて

1

sqlContext.read.jsonは、拡張された「きれいに印刷された」ファイルではなく、ファイル内に行単位で表示される完全なJSONエントリでのみ動作します。各Tuple2の最初のエントリは、ファイル名であり、第二は内容であるRDD[(String, String)]documentationwholeTextFilesリターンで述べたように

val jsonRDD = sparkContext.wholeTextFiles(fileName).map(_._2) 

:あなたの最善の策は、これを行うことです。あなたが気にしているのは2番目のものだけなので、._2でコンテンツにアクセスします。

次にあなたがDataFrameRDDを変換し、hereを説明した内容にto_jsonを適用することができます。

val jsonDF = sparkContext 
    .wholeTextFiles(fileName) 
    .map(_._2) 
    .toDF("json") 
    .select(to_json('json)) 
+1

私はそれが何を知っていてもいいですか? –

+0

コンソールや実際のコードで新しいことを試してみることをお勧めします。あなたが学習しているときや少なくともScaladocを読んでいるときに感じることができますが、答えを更新しました。 – Vidya

関連する問題