scala - 如何将列拆分为两个不同的列?

标签 scala apache-spark apache-spark-sql

这是数据帧df:

org.apache.spark.sql.DataFrame = [year_artist: string, count: bigint]

df.show() 返回:

+--------------------+-----+
|         year_artist|count|
+--------------------+-----+
|    1945_Dick Haymes|    5|
|1949_Ivory Joe Hu...|    1|
|     1955_Tex Ritter|    1|

我需要将第一列分成两个单独的部分:年份和艺术家。 我在想这样的事情:Spark map dataframe using the dataframe's schema .

但是,在我的实现中,以下内容不起作用:

df.rdd.map(row => (row(0).getAs[String].split("_")(0), row(0).getAs[String].split("_")(1)))

也许有一种方法可以在不转换为 RDD 的情况下实现它?

最佳答案

例如,您可以使用regexp_extract:

import org.apache.spark.sql.functions.regexp_extract

df.select(
  regexp_extract($"year_artist", "^(\\d{4})_(.*)", 1).alias("year"),
  regexp_extract($"year_artist", "^(\\d{4})_(.*)", 2).alias("artist")
)

分割:

import org.apache.spark.sql.functions.split

df.select(
  split($"year_artist", "_")(0).alias("year"),
  split($"year_artist", "_")(1).alias("artist")
)

关于scala - 如何将列拆分为两个不同的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44750844/

相关文章:

scala - 使用文本文件第一行的一部分作为RDD中的key

apache-spark - 如何避免连接中键列名称重复?

java - 启动 Spark Master Windows 7

java - 使用 Spark 连接 MariaDB 时出现 ClassNotFoundException

python - Pyspark 数据帧按字母顺序拆分并写入 S3

Scala:如果代码块的执行时间超过一定时间发出警告?

scala - 在 Scalatra 示例代码中找到 Scala 中的代字号

java - 脚本每次对多个请求使用相同的名称,而不是每个请求使用不同的名称

apache-spark - Spark UI 不断重定向到/null 并返回 500

java - 在类错误中找不到列