将函数 (mkString) 应用于 Spark 数据帧中的整个列,如果列名有"."则出错



我试图在Scala中的Spark数据框架的列上应用一个函数。该列是String类型,我想用"_"分隔符将字符串中的每个标记连接起来(例如:"a b"->"a b")。我是这样做的:

val converter: (String => String) = (arg: String) => {arg.split(" ").mkString("_")}
val myUDF = udf(converter)
val newDF = oldDF
  .withColumn("TEST", myUDF(oldDF("colA.B")) )
display(newDF)

这适用于名称不带点(".")的数据框中的列。但是,列中的点名为"colA"。B"似乎破坏了代码并抛出错误:

  org.apache.spark.sql.AnalysisException: Cannot resolve column name "colA.B" among (colA.B, col1, col2);

我认为一种解决方法是重命名列(类似于此),但我不希望这样做。

你可以尝试像下面的例子(来源)一样使用反引号

val df = sqlContext.createDataFrame(Seq(
  ("user1", "task1"),
  ("user2", "task2")
)).toDF("user", "user.task")
df.select(df("user"), df("`user.task`")).show()

+-----+---------+
| user|user.task|
+-----+---------+
|user1|    task1|
|user2|    task2|
+-----+---------+

在你的情况下,在应用函数之前,你需要反引号这样的列…

相关内容

  • 没有找到相关文章

最新更新