目前,如果我想用pyspark读取json,我要么使用受干扰的模式,要么我必须手动定义我的模式StructType
是否可以使用文件作为架构的参考?
答案 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>