在 Python 数据框连接中动态填充列名
Posted
技术标签:
【中文标题】在 Python 数据框连接中动态填充列名【英文标题】:dynamically populate column name in Python dataframe join 【发布时间】:2018-02-24 00:27:50 【问题描述】:我正在开发一个动态脚本,它可以join
任何给定的 pyspark 数据帧。问题是文件中的列名会有所不同,并且连接条件的数量可能会有所不同。我可以在循环中处理这个问题,但我使用变量名执行连接失败。
(我的意图是根据文件结构和连接条件动态填充 a 和 b 列或更多列)
b="incrementalFile.Id1"
a="existingFile.Id"
unChangedRecords = existingFile.join(incrementalFile,(a==b),"left")
Traceback(最近一次调用最后一次):文件“”,第 1 行,在文件中 “/usr/lib/spark/python/pyspark/sql/dataframe.py”,第 818 行,加入 assert isinstance(on[0], Column), "on 应该是 Column 或 Column 列表" AssertionError: on 应该是 Column 或 Column 列表
但如果我不在join
条件中放置任何变量,则相同的代码可以正常工作,如下所示。
unChangedRecords = existingFile.join(
incrementalFile,
(existingFile.Id==incrementalFile.Id1),
"left")
【问题讨论】:
为什么这个标签是'scala'? @DyZ :原因是,scala 或 pyspark 中的逻辑可以相同 【参考方案1】:在您的第二个示例中,existingFile.Id
是一个列,而不是一个字符串,但在您的第一个示例中,它是一个字符串。您想使用 pyspark.sql.functions.col 按名称引用列。它的文档没有示例,但在同一页面上的 alias 示例中使用了它。
【讨论】:
你太棒了!那是一个很好的收获。让我尝试接受答案.. 暂时 +1以上是关于在 Python 数据框连接中动态填充列名的主要内容,如果未能解决你的问题,请参考以下文章