我正在尝试在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);
我认为解决方法是重命名列(类似于this),但我不想这样做。
答案 0 :(得分:2)
您可以尝试使用后面的引号,如下例(source)
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|
+-----+---------+
在申请功能之前,你需要回复引用这样的专栏......