当前位置: 首页 > 知识库问答 >
问题:

使用scala基于Spark DataFrame中现有列的聚合添加新列

姬正文
2023-03-14

我有一个如下的数据框。我需要在现有列的基础上创建一个新列。

col1 col2
a      1
a      2
b      1
c      1
d      1
d      2

输出数据帧看起来像这样

col1  col2 col3 col4
a      1   1      2
a      2   1      2
b      1   0      1
c      1   0      1
d      1   1      2
d      2   1      2

我用来寻找col3的逻辑是如果col1计数

我熟悉如何在sql中实现这一点。但很难找到数据帧DSL的解决方案。任何帮助都将不胜感激。谢谢

共有3个答案

暨成双
2023-03-14

要添加col3,您可以在以下情况下使用withcolumn:

val df2 = df.withColumn("col3",when($"col2" > 1, 1).otherwise(0))

要添加col4,前面提到的groupBy/max join应该完成以下工作:

val df3 = df2.join(df.groupBy("col1").max("col2"), "col1")
龙飞
2023-03-14

Sparkdf有一个属性,名为与列。您可以根据需要添加任意多的派生列。但是该列没有添加到现有的DF中,而是创建了一个添加了列的新DF。

向数据添加静态日期

val myFormattedData = myData.withColumn("batchdate",addBatchDate(myData("batchdate")))
val addBatchDate = udf { (BatchDate: String) => "20160101" }
季骏祥
2023-03-14

groupBy col1和aggregate得到count和max。然后你可以把它和原始数据帧连接起来,得到你想要的结果

val df2 = df1.groupBy("col1").agg(count() as col3, max("col2") as col4) 

val df3 = df1.join(df2, "col1")
 类似资料:
  • 大家好,我想在数据帧的每一行中使用现有列添加新列,我正在Spark Scala中尝试这样做。。。df是包含可变列数的数据帧,只能在运行时确定。 但这个错误是eclipse本身 无法找到存储在数据集中的类型的编码器。通过导入spark.implicits.支持原始类型(Int,String等)和产品类型(case类)_将在未来版本中添加对其他类型序列化的支持。 方法映射没有足够的参数:(隐式证据7美

  • 这两个表是: > < li> 学生(学生标识,学生姓名); score (student_id,subject,score1,score2)。 我想在student表中添加一个新列来查找每个学生所有科目的平均分。我该怎么做呢?

  • 本文向大家介绍向Pandas中的现有DataFrame添加新列,包括了向Pandas中的现有DataFrame添加新列的使用技巧和注意事项,需要的朋友参考一下 Pandas 数据框是一种二维数据结构,即,数据以表格的形式在行和列中对齐。可以使用python dict,list和series等创建它。在本文中,我们将看到如何在现有数据框中添加新列。因此,首先让我们使用pandas系列创建一个数据框。

  • 问题内容: 我不知道如何使用Laravel框架向现有数据库表添加新列。 我试图使用…来编辑迁移文件。 在终端中,我执行和。 如何添加新列? 问题答案: 要创建迁移,您可以在Artisan CLI上使用migration:make命令。使用特定名称以避免与现有模型冲突 对于Laravel 3: 对于Laravel 5+: 然后,您需要使用该方法(在访问现有表而不是创建新表时)。您可以添加如下所示的列

  • Spark-Scala环境中的函数有一些问题。我想在我的DataFrame中添加一个新列,如下所示: 变成: 但是Spark返回给我这个错误: 你能帮我吗?非常感谢!