如何在Spark SQL查询中使用熊猫列表

问题描述 投票:-1回答:1

我有一个从spark数据帧转换过来的熊猫列表中的唯一遭遇ID列表。

# Convert spark sql dataframe into pandas
df_hos105_vanco_info= hos105_vanco_info.toPandas()

# Create a unique encounter pd list for encounter_id
hos105_vanco_info_encounter_list=df_hos105_vanco_info['encounter_id'].drop_duplicates().values.tolist()

此列表包含800个唯一的遇到ID,如何使用此列表在Spark sql中创建查询条件?

我尝试过此操作,但似乎逻辑不正确。

hos105_vanco_lab_detail=spark.sql("select *\
from hf_f_encounter e\
join hf_f_lab_procedure l\
on e.encounter_id=l.encounter_id\
where e.encounter_id in hos105_vanco_info_encounter_list")

hos105_vanco_lab_detail.count()

pandas pyspark apache-spark-sql pyspark-sql
1个回答
0
投票

简短的答案是,如果使用Spark对象,则坚持使用spark对象;如果使用pandas对象,则坚持使用熊猫对象。如果要将它们混合在一起,则应将它们从一个“世界”显式转换为另一“世界”。

因此,在这种情况下,如果要使用spark.sql,最简单的方法是将encounter_list转换为另一个spark对象。最小的示例在这里:

import pyspark
from pyspark.sql import SparkSession
import pandas as pd

df = pd.DataFrame({
    'a': [1,2,3],
    'b': [4,5,6]
})

# pretend this is your list of ids you are filtering off.
df2 = pd.DataFrame({
    'a': [1]
})

spark = SparkSession.builder.appName("example").getOrCreate()

spark_df = spark.createDataFrame(df)
spark_df2 = spark.createDataFrame(df2)

spark_df.registerTempTable("spark_df")
spark_df2.registerTempTable("spark_df2")

result = spark.sql("""select * from spark_df where a in (select a from spark_df2)""")
© www.soinside.com 2019 - 2024. All rights reserved.