我试图在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|
+-----+---------+
在你的情况下,在应用函数之前,你需要反引号这样的列…