2017-04-03 63 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这是在行的开始。在这种情况下,我只获得每行的第一个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条目“漂亮打印”。最好的办法是要做到这一点:

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

documentationwholeTextFiles回报RDD[(String, String)]其中每个Tuple2的第一项是文件名,第二个是内容的说明。只有第二个是你关心的,所以你可以通过._2访问内容。

然后您可以将RDDDataFrame和应用to_json的内容转换为描述here

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

我可以知道它做什么? –

+0

我建议您尝试在控制台或在您的实际代码新的东西来感受一下它,当你学习的 - 或者至少读Scaladoc - 但我已经更新了答案。 – Vidya

相关问题