我正在开发针对一组ORC文件的Spark DataFrame的SQL查询语句。程序如下:
现在我有一个名为“test”的表。如果我做以下操作:
我尝试过类似以下的方法:
但是这样做不起作用。我的问题是:如何访问“person”数组中的字段?
谢谢!
编辑:
sdf.printSchema() 的结果为:
from pyspark.sql import SparkSession
spark_session = SparkSession.builder.appName("test").getOrCreate()
sdf = spark_session.read.orc("../data/")
sdf.createOrReplaceTempView("test")
现在我有一个名为“test”的表。如果我做以下操作:
spark_session.sql("select count(*) from test")
如果只需要查询的结果是正确的,那么就没有问题。但我需要在查询中获取更多的列,包括数组中的一些字段。
In [8]: sdf.take(1)[0]["person"]
Out[8]:
[Row(name='name', value='tom'),
Row(name='age', value='20'),
Row(name='gender', value='m')]
我尝试过类似以下的方法:
spark_session.sql("select person.age, count(*) from test group by person.age")
但是这样做不起作用。我的问题是:如何访问“person”数组中的字段?
谢谢!
编辑:
sdf.printSchema() 的结果为:
In [3]: sdf.printSchema()
root
|-- person: integer (nullable = true)
|-- customtags: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- name: string (nullable = true)
| | |-- value: string (nullable = true)
错误信息:
AnalysisException: 'No such struct field age in name, value; line 16 pos 8'