python - 加入两个数据框pyspark
问题描述
我想加入两个数据框pyspark。
我正在使用join
,但这会增加实例。
dfResult = df1.join(df2, on='Class', how="inner")
我怎么能做到?两个数据帧中的数据以相同的方式排序,所以我只需要将一列(data3)从一个数据帧传递到另一个数据帧。
解决方案
欢迎来到 SO!已经有几个类似的问题了。您似乎有一个数据集,恰好有几个同名的列。它发生了。但是 spark 期望它们都不同,除了您加入的列。您可以通过简单地重命名列来解决此问题。
df1 = spark.createDataFrame(spark.sparkContext.parallelize([("123456","Rose","Yellow"),("123456","Jasmine","white"),("789654","Lily","Purple")])).toDF(*["id","name","color"])
df2 = spark.createDataFrame(spark.sparkContext.parallelize([("123456","Rose","Canada"),("123456","Jasmine","US"),("333444","Lily","Purple")])).toDF(*["id","name","Place"])
df3 = df1.join(df2, on=["name"], how="inner")
df3.show()
不重命名的加入会导致
+-------+------+------+------+------+
| name| id| color| id| Place|
+-------+------+------+------+------+
| Rose|123456|Yellow|123456|Canada|
|Jasmine|123456| white|123456| US|
| Lily|789654|Purple|333444|Purple|
+-------+------+------+------+------+
重命名加入
df3 = df1.join(df2, on=["name"], how="inner").select("name", "Place",df1.id.alias("id_1"), df2.id.alias("id_2"))
允许您使用数据集识别来自哪个列。
+-------+------+------+------+
| name| Place| id_1| id_2|
+-------+------+------+------+
| Rose|Canada|123456|123456|
|Jasmine| US|123456|123456|
| Lily|Purple|789654|333444|
+-------+------+------+------+
推荐阅读
- java - 如何从数组列表中获取不同的值?
- database - MongoDB电子商务网站的数据建模
- apache-spark - 配置 spark 应用程序参数的最佳方法是什么?
- graphics - Assimp 不加载从搅拌机导出的 obj 文件的层次结构
- artifactory - Conda 远程存储库 URL 是否与 Artifactory 一起使用?
- sql - SQL 代码在 MS-Access 中进行数据联合并保留相关信息
- python - 电子前沿基金会的猫笑话
- c++ - 为什么我的 cpp 单元测试在运行时寻找额外的库?
- python - 如何在 django 命令中实现应用程序命名空间?
- mongodb - 在 MongoDB 中重构文档