2016-07-06 109 views
0

我正在阅读每个文件大小约为10 MB的文件夹中的大约20,000个JSON文件。下面的代码需要大约30分钟来读取这些文件。在Spark中高效地读取json

有25个类型为D4的工作节点(Azure HDInsight)。

var rawJson = sqlContext.read.json("/data/*.json") 

以下是我正在使用的作业配置。

“--driverMemory”, “7克”, “--executorCores”, “3”, “--executorMemory”, “4G”, “--numExecutors”, “32”

JSON模式看起来像这样。不同的文件在“属性”部分包含不同数量的字段。

{ 
    "name": "AssetName", 
    "time": "2016-06-20T11:57:19.4941368-04:00", 
    "data": { 
    "type": "EventData", 
    "dataDetails": { 
     "name": "EventName", 
     "measurements": {   
     "StartTime": 61058529, 
     "EndTime": 61058737, 
     "Duration": 208, 
     "ID": 26509812, 
     "Version": 24720 
     }, 
     "properties": { 
     "identifier": "Foo", 
     "EventId": "6b613d8D-2f65-447e-bf6d-9e9133c0b803", 
     "TagGuid": "{9E4fe7c1-cf8a-4527-fd27-c0c58c0b1fed}", 
     "property1": "val1", 
     "property2": "val2", 
     "property3": "val3", 
     "property4": "False" 
     } 
    } 
    } 
} 

是否有更高效的/高性能的方式来读取这些json文件而不添加更多资源?

谢谢!

+0

您使用多少台工作机器?什么类型的磁盘和文件系统?你知道这个模式吗? – zero323

+1

@mtoto'jsonFile'很久以前就被弃用了,真的没有理由让它更快。 – zero323

+1

有25台工作机(使用HDFS文件系统的Azure HDInsights中的D4类型)。 – vijay

回答

0

sqlContext.read.json方法不会将分区数作为输入。尝试创建一个RDD [String]并控制并行性!

val jsonRDD = sc.textFile("/data/*.json", 100) 
val rawJson = sqlContext.read.json(jsonRDD)