apache-spark - 在 pyspark 中读取镶木地板文件时 where 子句中的动态列
问题描述
我有 parquet 文件,想根据动态列读取它们,所以举个例子,我有 2 个数据框,想根据 df2 从 df1 中选择数据。
所以我正在使用下面的代码,但希望在加入列方面使其动态化,今天我有 2 个列,明天我可以有 4 个。
a = dict[keys]
col1 = a[0]
col2 = a[1]
v = df1.join(df2,[df1[col1] == df2[col1],
df1.[col2] == df2.[col2],
how='inner')
那么如何使这些列动态化,以便不需要对连接条件进行硬编码,并将添加从连接条件中删除的列。
解决方案
我会首先根据您的 dict 生成一个连接条件对象,然后在连接中使用它。
from functools import reduce
join_condition = reduce(
lambda a, b: a && b,
[ df1[col] == df2[col]
for col
in dict[keys]
]
)
v = df1.join(
df2,
join_condition,
)
推荐阅读
- redis - 使用 redis 后端为每个任务使用唯一队列的分支
- python - 试图从表中提取数据并且有外来字符阻止我写入 csv 文件
- reactjs - 导致错误的正常 graphql 查询
- node.js - 迁移到 mongodb atlas db.once('open', () => {
- python - 如何从类中的 main 访问对象
- sql-server - 无法将 sum 函数与派生表结果一起使用
- mysql - 将 JSON 文件导入 MySQL 5.7
- java - Openjdk 和 Java webstart
- html - 动态大小的 HTML 列表框
- docker - 由于 docker 数据目录在节点上移动,服务/部署间歇性卡在 ContainerCreating 上的问题