2017-05-11 20 views
1

我遇到以下問題。我有大約30,000個JSON文件存儲在特定存儲桶中的S3中。這些文件非常小;每個只需要400-500Kb,但它們的數量並不是很小。「sqlContext.read.json」花費很長時間從S3中讀取30,000個小型JSON文件(400 Kb)

我想根據所有這些文件創建DataFrame。我使用通配符如下讀取JSON文件:

var df = sqlContext.read.json("s3n://path_to_bucket/*.json") 

我也試過,因爲json(...)這種做法已經過時:

var df = sqlContext.read.format("json").load("s3n://path_to_bucket/*.json") 

的問題是,它需要很長的時間來創建df。我等了4個小時,Spark工作仍在繼續。

是否有更有效的方法來收集所有這些JSON文件並基於它們創建一個DataFrame?

UPDATE:

,或者至少是它可以讀取最後1000個文件,而不是讀的所有文件?我發現,可以通過如下選項sqlContext.read.format("json").options,但我不知道如何只讀取N個最新的文件。

回答

1

如果你能得到最後的1000修改文件名成一個簡單的列表,你可以簡單地調用:

sqlContext.read.format("json").json(filePathsList: _*) 

請注意,.option調用(S)通常用於配置模式選項。

不幸的是,我以前沒有使用過S3,但我認爲你可以使用相同的邏輯在回答這個問題得到最後修改的文件名: How do I find the last modified file in a directory in Java?

0

您正在載入13Gb的信息。你確定創建DF需要很長時間嗎?也許它正在運行應用程序的其餘部分,但用戶界面顯示。

只需加載並打印DF的第一行。

無論如何,集羣的配置是什麼?