在pyspark json

时间:2017-12-07 15:47:02

标签: json pyspark schema

目前,如果我想用pyspark读取json,我要么使用受干扰的模式,要么我必须手动定义我的模式StructType

是否可以使用文件作为架构的参考?

1 个答案:

答案 0 :(得分:2)

您确实可以使用文件来定义架构。例如,对于以下架构:

TICKET:string 
TRANSFERRED:string 
ACCOUNT:integer

您可以使用此代码导入它:

import csv
from collections import OrderedDict 
from pyspark.sql.types import StructType, StructField, StringType,IntegerType

schema = OrderedDict()
with open(r'schema.txt') as csvfile:
    schemareader = csv.reader(csvfile, delimiter=':')
    for row in schemareader:
        schema[row[0]]=row[1]

然后您可以使用它来动态创建StructType架构:

mapping = {"string": StringType, "integer": IntegerType}

schema = StructType([
    StructField(k, mapping.get(v.lower())(), True) for (k, v) in schema.items()])

您可能必须为JSON文件创建更复杂的模式文件,但请注意,您无法使用JSON文件来定义模式,因为在解析JSON时无法保证列的顺序。< / p>