我正在尝试连接两个数据帧。
我创建了别名并根据这篇文章引用它们:Spark Dataframe区分具有重复名称的列
但是,当它点击<code>fillna()s的信息。
alloc_ns = allocation_num_spots.alias('alloc_ns')
avails_ns = avails_num_spots.alias('avails_ns')
compare_num_avails_inv = avails_ns.join(
alloc_ns,
(F.col('avails_ns.BreakDateTime') == F.col('alloc_ns.AllocationDateTime')) &
(F.col('avails_ns.RetailUnit') == F.col('alloc_ns.RetailUnit')),
how='left').fillna(
{'allocs_sum': 0}).withColumn(
'diff', F.col('avails_sum') - F.col('allocs_sum'))
但我一直有这个错误:
"Reference 'RetailUnit' is ambiguous, could be: avails_ns.RetailUnit, alloc_ns.RetailUnit.;"
Traceback (most recent call last):
File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/dataframe.py", line 1664, in fillna
return DataFrame(self._jdf.na().fill(value), self.sql_ctx)
File "/usr/lib/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1257, in __call__
answer, self.gateway_client, self.target_id, self.name)
File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/utils.py", line 69, in deco
raise AnalysisException(s.split(': ', 1)[1], stackTrace)
pyspark.sql.utils.AnalysisException: "Reference 'RetailUnit' is ambiguous, could be: avails_ns.RetailUnit, alloc_ns.RetailUnit.;"
下面是连接的输出:
+-------------------+----------+----------+-------------------+----------+----------+
| BreakDateTime|RetailUnit|avails_sum| AllocationDateTime|RetailUnit|allocs_sum|
+-------------------+----------+----------+-------------------+----------+----------+
|2019-05-09 04:15:00| CFAB| 60| null| null| null|
|2019-05-09 12:31:00| CFAB| 60| null| null| null|
|2019-05-09 03:15:00| CFAB| 60| null| null| null|
|2019-05-09 22:45:00| CFPK| 60|2019-05-09 22:45:00| CFPK| 120|
|2019-05-09 00:45:00| CFPK| 120|2019-05-09 00:45:00| CFPK| 30|
|2019-05-09 02:31:00| CFPK| 60| null| null| null|
|2019-05-09 13:45:00| CFPK| 60|2019-05-09 13:45:00| CFPK| 30|
|2019-05-09 14:15:00| CFPK| 60| null| null| null|
|2019-05-09 23:45:00| CFPK| 60|2019-05-09 23:45:00| CFPK| 120|
+-------------------+----------+----------+-------------------+----------+----------+
有人可以解释为什么这不起作用吗?我不想创建单独的列,因为它们应该在零售单元
上加入。
您应该重命名重复列
compare_num_avails_inv = (
avails_ns.join(
alloc_ns,
(F.col('avails_ns.BreakDateTime') == F.col('alloc_ns.AllocationDateTime')) & (F.col('avails_ns.RetailUnit') == F.col('alloc_ns.RetailUnit')),
how='left'
)
.withColumnRenamed(alloc_ns.RetailUnit, 'RetailUnitNs')
.fillna({'allocs_sum': 0})
.withColumn('diff', F.col('avails_sum') - F.col('allocs_sum'))
)
这样,如果需要,您就不需要删除列
使用. drop
函数,加入dataframe. drop(alloc_ns.RetailUnit)
后删除列
compare_num_avails_inv = avails_ns.join(
alloc_ns,
(F.col('avails_ns.BreakDateTime') == F.col('alloc_ns.AllocationDateTime')) &
(F.col('avails_ns.RetailUnit') == F.col('alloc_ns.RetailUnit')),
how='left').drop(alloc_ns.RetailUnit).fillna(
{'allocs_sum': 0}).withColumn(
'diff', F.col('avails_sum') - F.col('allocs_sum'))
即使我们不是指不明确的列,但 fillna
将遍历列名,然后抛出不明确列的异常。
我在连接两个表时遇到了一些问题: 组:group_id,group_name 学生:学生标识,组标识,名字,姓氏 我想计算每个小组有多少学生,然后输出小组名称,但是当我这样写时: 出现错误“列引用”groupid“不明确”。
使用pyspark数据帧,你如何做相当于熊猫 我想列出pyspark数据框列中的所有唯一值。 不是 SQL 类型方式(注册模板,然后 SQL 查询不同的值)。 此外,我不需要< code>groupby然后< code>countDistinct,而是希望检查该列中的不同值。
我有一个完全相同的文件A和B。我试图在这两个数据帧上执行内部和外部连接。因为我将所有的列都作为重复的列,所以现有的答案没有任何帮助。我遇到的其他问题包含一两个重复的列,我的问题是整个文件都是彼此重复的:无论是数据还是列名。 我的代码: 我面临的错误是:
我有两个数据帧df1(Employee表) 和 在我连接了df1.dept_id和df2.id上的这两个表之后: 同时将其保存在文件中, 它给出错误: 我读过有关使用字符串序列来避免列重复的信息,但这适用于要对其执行连接的列。我需要对未连接的列具有类似的功能。 有没有一种直接的方法可以将重复列嵌入表名以便保存? 我想出了一个解决方案,匹配两个df的列,并重命名重复的列,将表名附加到列名上。但是有直
在scala spark中连接不同数据帧时动态选择多列 从上面的链接,我能够让连接表达式工作,但如果列名不同,我们不能使用Seq(columns)而需要动态地连接它。这里的left_ds和right_ds是我想加入的数据流。下面我想要连接列id=acc_id和“acc_no=number”
我正在尝试在 pyspark 中连接两个数据帧,但将一个表作为数组列连接在另一个表上。 例如,对于这些表: 我想在列和上将df1连接到df2,但和应该是单个数组类型列。此外,应保留所有名称。新数据框的输出应该能够转换为此json结构(例如前两行): 任何关于如何实现这一目标的想法都将不胜感激! 谢谢, 卡罗莱纳州