2
我試圖在Scala的Spark數據框的列上應用一個函數。該列是一個字符串類型,我想將字符串中的每個標記與「_」分隔符(例如「A B」 - >「A_B」)連接起來。我正在這樣做:將函數(mkString)應用於Spark數據框中的整個列,如果列名具有「。」,則會出錯。
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),但我我寧願不這樣做。
PLS [查看](HTTP:/ /stackoverflow.com/questions/30359539/accessing-column-names-with-periods-spark-sql-1-3) –
可能你正在面對這個[issue](https://issues.apache.org/jira/browse/SPARK-15230)看起來像它在2.0中固定了哪個版本的火花? –
我使用的是Spark 1.6.2,因爲df.map(row => ...)似乎不適用於Spark 2.0。我確定它確實如此,但是我使用了1.6.2,直到我能弄明白如何。 – Feynman27