2017-01-03 19 views
0

sqlContext.read.json("...path.to.file...")PySpark JSON解析是在Python還是JVM中進行?

我正在使用pyspark在Python中編寫Spark腳本。 JSON解析是在Python還是在JVM上發生的?如果是Python,它是使用C simplejson擴展還是本地Python?

我正在做一個lot的JSON解析,所以這裏的表現很重要。

回答

2

JSON解析在JVM中完成,它是加載jsons最快的文件。

但是,如果你沒有指定模式到read.json,那麼spark會探測所有的輸入文件以找到jsons的「超集」模式。所以,如果性能問題,首先用樣本文件小JSON文件,然後從他們收集模式:

schema = sqlContext.read.json("/path/to/small/file.json").schema 

然後加載你的大數據集specyfying模式:

df = sqlContext.read.json("/path/to/big/dataset", schema=schema) 
+0

您也可以手動設置模式。在很多情況下,你並不需要所有的字段,所以你可以設置字段的一個子集,構建一個模式並直接提供該模式。 –

+0

是的,在我的代碼中我實際上是'sqlContext.read.schema(...)以.json(...)'。我只是簡化了這裏的例子:)謝謝! –

0

當您執行sqlContext.read.json時,它將在幕後轉換爲由scala代碼評估的表達式。這意味着json解析將由JVM完成。