Databricks-使用PySpark从SQL列分解JSON
Databricks的新成员。有一个SQL数据库表,我从中创建数据帧。其中一列是JSON字符串。我需要将嵌套的JSON分解为多列。用这个和这个把我带到我现在的位置 JSON示例:Databricks-使用PySpark从SQL列分解JSON,json,pyspark,apache-spark-sql,pyspark-sql,azure-databricks,Json,Pyspark,Apache Spark Sql,Pyspark Sql,Azure Databricks,Databricks的新成员。有一个SQL数据库表,我从中创建数据帧。其中一列是JSON字符串。我需要将嵌套的JSON分解为多列。用这个和这个把我带到我现在的位置 JSON示例: { “模块”:{ “PCBA序列号”:“G7456789”, “制造代号”:“迪士尼”, “固件版本”:“0.0.0”, “硬件版本”:“46858”, “制造日期”:“2018年10月17日下午4:04:25”, “测试结果”:“失败”, “测试开始时间”:“2018年10月22日上午6:14:14”, “测试结束时
{
“模块”:{
“PCBA序列号”:“G7456789”,
“制造代号”:“迪士尼”,
“固件版本”:“0.0.0”,
“硬件版本”:“46858”,
“制造日期”:“2018年10月17日下午4:04:25”,
“测试结果”:“失败”,
“测试开始时间”:“2018年10月22日上午6:14:14”,
“测试结束时间”:“2018年10月22日上午6:16:11”
}
迄今为止的代码:
#define schema
schema = StructType(
[
StructField('Module',ArrayType(StructType(Seq
StructField('PCBA Serial Number',StringType,True),
StructField('Manufacturing Designator',StringType,True),
StructField('Firmware Version',StringType,True),
StructField('Hardware Revision',StringType,True),
StructField('Test Result',StringType,True),
StructField('Test Start Time',StringType,True),
StructField('Test End Time',StringType,True))), True) ,True),
StructField('Test Results',StringType(),True),
StructField('HVM Code Errors',StringType(),True)
]
#use from_json to explode json by applying it to column
df.withColumn("ActivityName", from_json("ActivityName", schema))\
.select(col('ActivityName'))\
.show()
错误:
SyntaxError: invalid syntax
File "<command-1632344621139040>", line 10
StructField('PCBA Serial Number',StringType,True),
^
SyntaxError: invalid syntax
SyntaxError:无效语法
文件“”,第10行
StructField('PCBA序列号',StringType,True),
^
SyntaxError:无效语法
当您使用pyspark时,类型应该是StringType()
而不是StringType
并删除Seq
将其替换为[]
schema = StructType([StructField('Module',ArrayType(StructType([
StructField('PCBA Serial Number',StringType(),True),
StructField('Manufacturing Designator',StringType(),True),
StructField('Firmware Version',StringType(),True),
StructField('Hardware Revision',StringType(),True),
StructField('Test Result',StringType(),True),
StructField('Test Start Time',StringType(),True),
StructField('Test End Time',StringType(),True)])), True),
StructField('Test Results',StringType(),True),
StructField('HVM Code Errors',StringType(),True)])
@N.Fisher,答案有用吗?这确实有用!我混淆了Scala和Python之间的语法切换