2016-06-08 12 views
0

我有一個Web服務器,它返回我想要加載到Apache Spark DataFrame中的JSON數據。現在我有一個使用wget來寫JSON數據提交一個shell腳本,然後運行一個Java程序,它看起來是這樣的:從Java的Web源代碼獲取JSON到Apache Spark

DataFrame df = sqlContext.read().json("example.json"); 

我已經看過了Apache星火文件,有沒有按」似乎是自動將這兩個步驟結合在一起的一種方法。必須有一種方法可以在Java中請求JSON數據,將其存儲爲對象,然後將其轉換爲DataFrame,但我一直無法弄清楚。誰能幫忙?

回答

1

你可以存儲JSON數據到像字符串列表:

final String JSON_STR0 = "{\"name\":\"0\",\"address\":{\"city\":\"0\",\"region\":\"0\"}}"; 
final String JSON_STR1 = "{\"name\":\"1\",\"address\":{\"city\":\"1\",\"region\":\"1\"}}"; 
List<String> jsons = Arrays.asList(JSON_STR0, JSON_STR1); 

其中每個字符串表示一個JSON對象。

然後,你可以轉換列表中的RDD:

RDD<String> jsonRDD = sc.parallelize(jsons); 

一旦你得到了RDD,很容易有數據幀:

DataFrame data = sqlContext.read().json(jsonRDD); 
+0

確定這個工程我以前的評論(道歉,我已刪除)。我將這個答案與http://stackoverflow.com/questions/2586975/how-to-use-curl-in-java結合使用。我想我覺得有點混亂是這是如何工作的。我希望json方法只能指望一個文件目錄。此外,對於非常大的JSON文件,此方法似乎有點內存繁重,因爲您不斷重新複製數據(http-> Java String-> RDD-> DataFrame),而不是僅從文件加載數據。如果Spark有某種JS​​ON-over-REST方式與數據源交談,我就會遊蕩。 – dgnball

+0

你說得對,將數據加載到對象中佔用大量的內存。我正在尋找JSON-over-REST解決方案。一旦找到解決方案,我會回來的 –