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

在Spark数据集中从其他2列中添加一列[重复]

甘明朗
2023-03-14

我有一个数据集

+----+-------+
| age|   name|
+----+-------+
|  15|Michael|
|  30|   Andy|
|  19| Justin|
+----+-------+

现在我想添加一个列,该列的字符串值为age加上字符串值为name,如下所示:

+----+-------+-----------+
| age|   name|cbdkey     |
+----+-------+-----------+
|  15|Michael|  15Michael|
|  30|   Andy|  30Andy   |
|  19| Justin|  19Justin |
+----+-------+-----------+

我使用:

df.withColumn("cbdkey",col("age").+(col("name"))).show()

但是新列cbdkey的所有值都是null。那么,我应该怎么做呢?提前谢谢。


共有2个答案

马淇
2023-03-14

另一种方法是在数据帧上编写一个UDF(用户定义函数)调用

val concatUDF = udf {
  (age: Int, name: String) => {
    age + name
  }
}

df.withColumn("cbdkey", concatUDF(col("age"), col("name"))).show()

输出:

+---+-------+---------+
|age|   name|   cbdkey|
+---+-------+---------+
| 15|Michael|15Michael|
| 30|   Andy|   30Andy|
| 19| Justin| 19Justin|
+---+-------+---------+
熊烨
2023-03-14

您可以使用concat功能:

df.withColumn("cbdkey", concat(col("age"), col("name"))).show
+---+-------+---------+
|age|   name|   cbdkey|
+---+-------+---------+
| 15|Michael|15Michael|
| 30|   Andy|   30Andy|
| 19| Justin| 19Justin|
+---+-------+---------+

如果需要指定自定义分隔符,请使用concat_ws

df.withColumn("cbdkey", concat_ws(",", col("age"), col("name"))).show
+---+-------+----------+
|age|   name|    cbdkey|
+---+-------+----------+
| 15|Michael|15,Michael|
| 30|   Andy|   30,Andy|
| 19| Justin| 19,Justin|
+---+-------+----------+
 类似资料:
  • 我使用文件路径解析 Spark 数据帧,但现在我想将路径与时间一起作为单独的列添加到生成的数据帧中。下面是一个当前的解决方案(pathToDF 是一个帮助器方法): 我正在尝试做这样的事情,但我不确定如何使用Column添加时间列: 实现它的更好方法是什么? 输入自由度: 当前结果: 预期结果:

  • 问题内容: 我有一个带有Books的QuerySet,我想为每个Book结果添加一个字段。 在原始SQL中,我会写: 如何在Django中实现?我试过了,但似乎并不适合这种东西。 问题答案: 如遇票数可能的值是只有1和-1,你可以使用刚才提到他们总结注释:。 如果还有更多可能的值,则可以通过添加到上述查询中来过滤注释。 如果是更复杂的,你将不得不使用与。

  • 问题内容: 我有一些像这样的数据框: A中值 的 可能范围仅为0到7 。 另外,我有一个8个元素的列表,如下所示: 如果A列中的元素是 n ,我需要将List中的第 n 个元素插入新列,例如’D’。 如何一口气做到这一点而又不遍历整个数据框? 产生的数据框如下所示: 注意:数据框很大,迭代是最后一个选项。但是如果需要的话,我也可以将其他数据结构(如dict)排列在“ List”中的元素上。 问题答

  • 假设我有这样一个数据帧: 我有这样一个函数: 现在,我想根据函数的计算为我的数据帧获取一个新列。 显然,不起作用。 如何添加该列?

  • 在我的scala程序中,我有一个dataframe,其中有两列和(类型都为)。除此之外,我有一个先前定义的对象和一些方法和属性。在这里,我想要使用dataframe的当前值和中的属性向dataframe添加一个新列。 例如,如果我有下面的dataframe: 谢谢你。

  • 问题内容: 我试图基于一个的数据创建“ n” 。我正在检查in的Integer值,并循环执行sql语句以创建与列中一样多的“ n” 。 这是我的代码: 我需要创建“ n”,但我不知道如何在循环之前声明类型并在for内填充。 现有数据类型: 新的数据类型: 问题答案: 您可以创建一个可变列表并填充它: 但是更好的方法(不使用可变数据结构)是将整数列表 映射 到DataFrames列表中: