2017-01-10 17 views
0

を用いてデータフレームにJSONオブジェクトの問合せ:は、私は、次のスキーマとMySQLのテーブルを持っているPyspark

id-int 
path-varchar 
info-json {"name":"pat", "address":"NY, USA"....} 

Iは、MySQLにpysparkを接続するためのJDBCドライバを使用します。私はmysqlからデータを取得することができます

df = sqlContext.sql("select * from dbTable") 

このクエリはすべて正常に動作します。私の質問は、どのように私は "情報"の列でクエリできますか?たとえば、以下のクエリはMySQLシェルですべて正常に動作し、データを取得しますが、これはPyspark(2+)ではサポートされていません。

select id, info->"$.name" from dbTable where info->"$.name"='pat' 

答えて

3
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') 

状況に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() 

スパークSQLはほとんどHIVEのSQLのようなものです、あなたは

を見ることができます

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

+0

ご返信ありがとうございます。このメソッドは、データがデータフレームにロードされている場合にのみ機能します。何十万というレコードがあります。完全なテーブルを読み込んでデータをフィルタリングするのは、効率的な方法ではないかもしれません。完全な表をロードするのではなく、照会で一致したデータ(json検索)を検索する方法はありますか? – Momi

関連する問題