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

Apache spark 从嵌套数组/结构查询字段,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,我刚刚开始使用JSON数据,并使用以下模式: root |-- parameters: array (nullable = true) | |-- element: array (containsNull = true) | | |-- element: struct (containsNull = true) | | | |-- name: string (nullable = true) | | | |-- value: str

我刚刚开始使用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] 

有人能告诉我在不进行任何转换的情况下查询此嵌套数据的最简单方法是什么吗?

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


import pyspark.sql.functions as F
df.select(F.posexplode("parameters").alias("position","parameters")).where('position = 0').select('parameters.name')
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|
+---+--------+----------+----------+

以表格形式提供输入和输出数据始终是一种良好的做法。