我有一个从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()
简短的答案是,如果使用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)""")