【发布时间】:2020-05-12 18:05:33
【问题描述】:
我在包含 JSON 数据的 spark 数据框中有一个解码列。例如,
第 1 行:{'id': 1, 'name': 'Slatan', 'surname': 'Yav', 'age': 24}
第 2 行:{'id': 2, 'name': 'Nikos', 'surname': 'Stef', 'age': 34}
第 3 行:{'id': 3, 'name': 'Panos', 'surname': 'Rodes', 'age': 44}
我只想提取“姓名”、“姓氏”、“年龄”并将它们添加到 Spark 数据框中。
我的方法
schema = StructType(
[
StructField('name', StringType(), True),
StructField('surname', StringType(), True),
StructField('age', IntegerType(), True)
]
)
final_df=None
final_df = spark.createDataFrame([], schema)
columns_selected=schema.fieldNames()
final_df=final_df.union(avro_decoded.withColumn("Body_decoded", from_json("Body_decoded", schema)).select(col( 'Body_decoded.*columns_selected')))
但我得到了错误。如何仅使用名称、姓氏和排除 id 值字段填充 final_df(spark 数据框)?
错误
'No such struct field *columns_selected in name, surname;'
解码前的正文列
avro_decoded=read_avro_data.withColumn('Body_decoded', decode(read_avro_data.Body, charset="UTF-8")).select("Body_decoded")
avro_decoded.printSchema()
返回:
root
|-- Body_decoded: string (nullable = true)
比你提前任何建议。
【问题讨论】:
-
错误是什么?
-
'No such struct field *columns_selected in name, surname;'
-
尝试打印你的dataFrame,看看里面有什么。有时它在读取 dataFrame 时将第一个字母大写
-
当我打印 Body_decoded 列时,我得到了一个 spark 系列,其中的行类似于我的问题开头所写的值。 (json 行)...Body_decoded 是 avro_decoded spark df 的一列
-
你能把代码贴在这里吗?我不知道您是如何尝试访问它的。
标签: json apache-spark pyspark