这是数据帧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/