ошибка перегруженного значения метода regexp_replace с альтернативами - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь заменить символ "/" пробелом ("") из данных в столбце с именем UserAgent в кадре данных df_test

Данные в столбце выглядят так:

Mozilla / 5.0 (Windows NT 6.1; WOW64; Trident / 7.0; rv: 11.0), например Gecko

Я пытался использовать

val df_test =spark.sql(s"select UserAgent from df_header_pivot")
 df_test.withColumn("UserAgent", regexp_replace("UserAgent", "[/]", ""))

, но получаю сообщение об ошибке:

записная книжка: 4: ошибка: перегруженное значение метода regexp_replace с альтернативами: (e: org.apache.spark.sql.Column, pattern: org.apache.spark.sql.Column, замена: org.apache.spark.sql.Column) org.apache.spark.sql.Column (e: org.apache.spark.sql.Column, pattern: String, replace: String) org.apache.spark.sql.Column нельзя применить к(org.apache.spark.sql.ColumnName, org.apache.spark.sql.Column) df_test.withColumn ("UserAgent", regexp_replace ($ "UserAgent", горит ("/")))

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Поскольку вы используете SparkSQL, вы можете просто вызвать функцию replace в самом SQL, например, что-то вроде этого:

val df_test =spark.sql(s"select replace(UserAgent, '/', '') AS UserAgent from tmp")

df_test.show

Альтернативно используйте функцию translate для замены символов, в которых нет регулярных выраженийтребуется, например,

df_test
  .withColumn("UserAgent", translate($"UserAgent", "/", ""))
  .show

Регулярное выражение не требуется.

0 голосов
/ 16 февраля 2019

Вам необходимо использовать символ $ перед именем столбца в функции regexp_replace. import org.apache.spark.sql.functions._ val df_test =spark.sql(s"select UserAgent from df_header_pivot") df_test.withColumn("UserAgent", regexp_replace($"UserAgent", "[/]", " "))

...