Удалите несколько пробелов одним пробелом в Spark SQL - PullRequest
0 голосов
/ 25 июня 2018

У меня есть DataFrame, созданный с помощью HiveContext, где один из столбцов содержит записи вроде:

text1        text2

Мы хотим, чтобы промежутки между двумя текстами были заменены одним текстом и получили окончательный результат в виде:

text1 text2

Как мы можем достичь этого в Spark SQL? Обратите внимание, что мы используем Hive Context, регистрируем временную таблицу и пишем над ней SQL-запросы.

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Еще лучше, что я теперь просвещен настоящим экспертом.На самом деле это проще:

   import org.apache.spark.sql.functions._
// val myUDf = udf((s:String) => Array(s.trim.replaceAll(" +", " ")))
   val myUDf = udf((s:String) => s.trim.replaceAll("\\s+", " ")) // <-- no Array(...)
// Then there is no need to play with columns excessively:

   val data = List("i  like    cheese", "  the dog runs   ", "text111111   text2222222")
   val df = data.toDF("val")
   df.show()

   val new_df = df.withColumn("new_val", myUDf(col("val")))
   new_df.show
0 голосов
/ 25 июня 2018
import org.apache.spark.sql.functions._

val myUDf = udf((s:String) => Array(s.trim.replaceAll(" +", " ")))
//error: object java.lang.String is not a value --> use Array

val data = List("i  like    cheese", "  the dog runs   ", "text111111   text2222222")
val df = data.toDF("val")
df.show()

val new_df = df
  .withColumn("udfResult",myUDf(col("val")))
  .withColumn("new_val", col("udfResult")(0))
  .drop("udfResult")
new_df.show

Вывод на блоки данных

+--------------------+
|                 val|
+--------------------+
|   i  like    cheese|
|     the dog runs   |
|text111111   text...|
+--------------------+

+--------------------+--------------------+
|                 val|             new_val|
+--------------------+--------------------+
|   i  like    cheese|       i like cheese|
|     the dog runs   |        the dog runs|
|text111111   text...|text111111 text22...|
+--------------------+--------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...