我有一个这样的数据帧(受这个问题的启发,设置略有不同):
df3 = hive_context.createDataFrame([
Row(a=107831, f=3),
Row(a=107531, f=2),
Row(a=125231, f=2)
])
基于此,我创建了两个新对象。每个都是原始数据帧的子集:
from pyspark.sql.functions import col
df1 = (df3
.filter(((col('a') == 107831) & (col('f') == 3))|
((col('a') == 125231) & (col('f') == 2))))
df2 = (df3
.filter(((col('a') == 107831) & (col('f') == 3))|
((col('a') == 107531) & (col('f') == 2))))
然后,我想连接这两个数据集,并从每个数据集获取< code>f列,如下所示:
a = (df1
.join(df2, (df1['a'] == df2['a']), how = 'full')
.select(df1['f'], df2['f']).collect())
然而,我得到了[行(f=None,f=nones),行(f=2,f=2),行(f=3,f=3)]
而不是所需的< code>[Row(f=3,f=4),Row(f=None,f=2),Row(f=2,f=None)]或表示为表格:
+------+----+------+----+
| a| f| a| f|
+------+----+------+----+
|107831| 3|107831| 4|
| null|null|107531| 2|
|125231| 2| null|null|
+------+----+------+----+
有人知道如何解决这个问题吗?我必须把df1和df2存储在某个地方吗?
当我运行上述链接问题中的场景时,我得到了预期的结果:
df1 = hive_context.createDataFrame([
Row(a=107831, f=3),
Row(a=125231, f=2),
])
df2 = hive_context.createDataFrame([
Row(a=107831, f=4),
Row(a=107531, f=2),
])
a = df1.join(df2, (df1['a'] == df2['a']), how = 'full').select(df1['f'], df2['f']).collect()
a
我在python 3.6
和spark 2.3
如果有重复的列名,请在数据帧上使用别名以避免歧义:
a = df1.alias('l').join(df2.alias('r'), on='a', how = 'full').select('l.f', 'r.f').collect()
print(a)
#[Row(f=3, f=3), Row(f=None, f=2), Row(f=2, f=None)]
我有两个数据帧df1(Employee表) 和 在我连接了df1.dept_id和df2.id上的这两个表之后: 同时将其保存在文件中, 它给出错误: 我读过有关使用字符串序列来避免列重复的信息,但这适用于要对其执行连接的列。我需要对未连接的列具有类似的功能。 有没有一种直接的方法可以将重复列嵌入表名以便保存? 我想出了一个解决方案,匹配两个df的列,并重命名重复的列,将表名附加到列名上。但是有直
问题内容: 我目前有一张包含以下记录的表: 其中同一字母表示一些共同的标准(例如,“字母”列的共同值)。我按照以下标准进行自我加入: 此联接提供如下内容: 但是,我只希望每对都包含一次(组合而不是排列)。我将如何获得以下信息: 问题答案: 稍微更改JOIN条件将实现您想要的。 代替: 使用 这将仅包括大于的组合,实际上大于的组合实际上将结果限制为每个组合的一个有效顺序。
我有两张桌子。CategoryMaster和PotentialProject 我想加入typeOfProject和CategoryID。 hibernate中的错误消息是无效的列名TypeOfProject。请给我一些建议。谢谢你。
问题内容: 我有下表: 现在,我想为每个用户创建所有可能的语言对,这意味着我希望结果集为:对于用户1:(2,7),(7,8),(2,8) 对于用户2:(10,3) 为此,我已经完成了以下查询: 我得到的结果是针对用户1的:(2,7),(7,8),(2,8),(7,2),(8,7),(8,2) 对于用户2:(10,3),(3,10) (10,3)和(3,10)对我来说没有区别 如何删除重复的行? t
问题内容: 我有两个表来包含国家/地区的州(state_table)和城市(city_table) 城市表具有state_id以便将其与state_table相关联 两个表中已经有数据。 现在的问题 城市表包含一个州内一个城市的多个条目。另一个城市可能也可能没有相同的城市名称 例如:cityone将在city表中使用stateone出现5次,使用statetwo出现2次 那么,我将如何编写查询以为
问题内容: 我有三个表,每个表都有一个外键。当执行联接时,我得到重复的列。 给定 我的查询语句: 我的目标是从联接中获得所有列的一行,而没有重复的列。那么我应该使用什么SQL语句语法? 问题答案: 默认情况下,如果使用MySQL,MySQL将返回所有表的所有列。您将需要在查询中显式输入列名称,以所需的方式检索它们。使用查询,如下所示: