как использовать список панды в запросе spark sql - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть список уникальных meet_id в списке панд, конвертируемых из фрейма данных spark.

# 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 уникальных идентификаторов встреч, как я могу использовать этот список для создания условия запроса в spark sql?

Я пробовал это, но, кажется, логика c неверна.

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()

1 Ответ

0 голосов
/ 18 апреля 2020

Короткий ответ: если вы работаете с объектами Spark, вы придерживаетесь искровых объектов, если вы работаете с pandas объектами, вы придерживаетесь pandas объектов. Если вы хотите смешать их вместе, вам следует явно преобразовать их из одного «мира» в другой «мир».

Так что в этом случае, если вы хотите работать с spark.sql, самый простой способ - преобразовать encounter_list в другой искровой объект. Минимальный пример здесь:

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)""")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...