簡體   English   中英

Pyspark從JSON文件獲取架構

[英]Pyspark get Schema from JSON file

我試圖從JSON文件中獲取Pyspark模式,但是當我使用Python代碼中的變量創建模式時,我能夠看到<class 'pyspark.sql.types.StructType'>的變量類型,但是當我我試圖通過JSON文件來顯示unicode的類型。

有什么辦法可以通過JSON文件獲取pyspark模式?

JSON文件內容:

{                                                                                                                                                                                                
"tediasessionclose_schema" : "StructType([ StructField('@timestamp', StringType()), StructField('message' , StructType([ StructField('componentAddress', StringType()), StructField('values', StructType([ StructField('confNum', StringType()), StructField('day', IntegerType())])"                                                                                                                                                         
}

Pyspark代碼:

df = sc.read.json(hdfs_path, schema = jsonfile['tediasessionclose_schema'])

您可以通過評估讀取json所獲得的字符串來獲得模式:

import json
from pyspark.sql.types import StructField, StringType, IntegerType, StructType

with open('test.json') as f:
    data = json.load(f)

df = sqlContext.createDataFrame([], schema = eval(data['tediasessionclose_schema']))
print(df.schema)

輸出:

StructType(List(StructField(@timestamp,StringType,true),StructField(message,StructType(List(StructField(componentAddress,StringType,true),StructField(values,StructType(List(StructField(confNum,StringType,true),StructField(day,IntegerType,true))),true))),true)))

其中test.json是:

{"tediasessionclose_schema" : "StructType([ StructField('@timestamp', StringType()), StructField('message' , StructType([ StructField('componentAddress', StringType()), StructField('values', StructType([ StructField('confNum', StringType()), StructField('day', IntegerType())]))]))])"}

希望這可以幫助!

config_json文件:

{"json_data_schema": ["contactId", "firstName", "lastName"]}

PySpark應用程序:

schema = StructType().add("contactId", StringType()).add("firstName", StringType()).add("lastName", StringType())

參考: https : //www.python-course.eu/lambda.php

schema = StructType()
schema = map(lambda x: schema.add(x, StringType(), True), (data["json_data_schema"]))[0][0:]

希望此解決方案對您有用!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM