使用Pyspark查询数据框中的json对象

cir*_*iri 3 python mysql json apache-spark pyspark

我有一个具有以下架构的MySql表:

id-int
path-varchar
info-json {"name":"pat", "address":"NY, USA"....}
Run Code Online (Sandbox Code Playgroud)

我使用JDBC驱动程序将pyspark连接到MySql。我可以使用以下方法从mysql检索数据

df = sqlContext.sql("select * from dbTable")
Run Code Online (Sandbox Code Playgroud)

此查询一切正常。我的问题是,如何查询“信息”列?例如,下面的查询在MySQL Shell中正常工作并检索数据,但是Pyspark(2+)不支持此功能。

select id, info->"$.name" from dbTable where info->"$.name"='pat'
Run Code Online (Sandbox Code Playgroud)

Zha*_*ong 8

from pyspark.sql.functions import *
res = df.select(get_json_object(df['info'],"$.name").alias('name'))
res = df.filter(get_json_object(df['info'], "$.name") == 'pat')
Run Code Online (Sandbox Code Playgroud)

已经有一个名为get_json_object的函数


针对您的情况:

df = spark.read.jdbc(url='jdbc:mysql://localhost:3306', table='test.test_json',
                     properties={'user': 'hive', 'password': '123456'})
df.createOrReplaceTempView('test_json')
res = spark.sql("""
select col_json,get_json_object(col_json,'$.name') from test_json
""")
res.show()
Run Code Online (Sandbox Code Playgroud)

Spark sql几乎像HIVE sql,可以看到

https://cwiki.apache.org/confluence/display/Hive/Home