我已经搜索了大量的文档,试图找到一个例子来说明我正在尝试做的事情。我承认,更大的问题可能是我缺乏python专业知识。所以我在这里接触,希望有人能给我指出正确的方向。我正在尝试创建一个python函数,基于函数参数动态查询表。下面是我正在尝试做的一个例子:
def validateData(_ses, table_name,sel_col,join_col, data_state, validation_state):
sdf_t1 = _ses.table(table_name).select(sel_col).filter(col('state') == data_state)
sdf_t2 = _ses.table(table_name).select(sel_col).filter(col('state') == validation_state)
df_join = sdf_t1.join(sdf_t2, [sdf_t1[i] == sdf_t2[i] for i in join_col],'full')
return df_join.to_pandas()
这将被称为这样的:
df = validateData(ses,'table_name',[col('c1'),col('c2')],[col('c2'),col('c3')],'AZ','TX')
我遇到的问题是函数的第5行:
df_join = sdf_t1.join(sdf_t2, [col(sdf_t1[i]) == col(sdf_t2[i]) for i in join_col],'full')
我知道代码是不正确的,但我希望它能解释我想做的事情。如果有人有任何建议,如果这是可能的或如何,我将不胜感激。
2条答案
按热度按时间tcomlyy61#
与其加入数据框,我认为使用直接SQL更容易,并将数据拉入雪框,然后将其转换为Pandas数据框。
3pmvbmvn2#
本质上你需要的是从两个变量列表中创建一个python表达式,我没有比使用eval更好的主意了。
也许可以试试
eval(" & ".join(["(col(sdf_t1[i]) == col(sdf_t2[i]))" for i in join_col])
。请注意,我还没有完全测试这个,只是想抛出一个想法。