从嵌套数组/结构查询字段

nzk0hqpo  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(492)

我刚刚开始使用json数据,并使用以下模式:

root
 |-- parameters: array (nullable = true)
 |    |-- element: array (containsNull = true)
 |    |    |-- element: struct (containsNull = true)
 |    |    |    |-- name: string (nullable = true)
 |    |    |    |-- value: string (nullable = true)

我正在尝试使用查询数据,但出现一个错误,指出没有参数的结构字段:

df.select("parameters[0].name").show()

错误:

pyspark.sql.utils.AnalysisException: u'No such struct field parameters[0]

有人能让我知道什么是最简单的方式查询这个嵌套数据没有任何转换?

pxy2qtax

pxy2qtax1#

import pyspark.sql.functions as F
df.select(F.posexplode("parameters").alias("position","parameters")).where('position = 0').select('parameters.name')
nxowjjhe

nxowjjhe2#

假设您有一个列类型为arraytype的dataframe

from pyspark.sql import functions as F

df_b = spark.createDataFrame([('1',['10', '20'])],[ "ID","TYPE"])
+---+--------+
| ID|    TYPE|
+---+--------+
|  1|[10, 20]|
+---+--------+

如果要从数组列中提取数据,可以使用-getitem(),如下所示

df_b = df_b.withColumn('type_col_1', F.col('TYPE').getItem(0))
df_b = df_b.withColumn('type_col_2', F.col('TYPE').getItem(1))
df_b.show()
+---+--------+----------+----------+
| ID|    TYPE|type_col_1|type_col_2|
+---+--------+----------+----------+
|  1|[10, 20]|        10|        20|
+---+--------+----------+----------+

相关问题