SparkSQL Получить все префиксы слова - PullRequest
0 голосов
/ 13 июня 2019

Скажем, у меня есть столбец в кадре данных SparkSQL, например:

+-------+
|  word |
+-------+
| chair |
|  lamp |
| table |
+-------+

Я хочу разбить все префиксы следующим образом:

+--------+
| prefix |
+--------+
|      c |
|     ch |
|    cha |
|   chai |
|  chair |
|      l |
|     la |
|    lam |
|   lamp |
|      t |
|     ta |
|    tab |
|   tabl |
|  table |
+--------+

Есть ли хороший способ сделать это БЕЗ использования udfs или методов функционального программирования, таких как flatMap в spark sql? (Я говорю о решении с использованием оптимальных функций codegen в org.apache.spark.sql.functions._)

1 Ответ

3 голосов
/ 13 июня 2019

Технически это возможно, но я сомневаюсь, что оно будет работать лучше, чем простое flatMap (если производительность - причина избегать flatMap):

val df = Seq("chair", "lamp", "table").toDF("word")
df.withColumn("len", explode(sequence(lit(1), length($"word"))))
  .select($"word".substr(lit(1), $"len") as "prefix")
  .show()

Вывод:

+------+
|prefix|
+------+
|     c|
|    ch|
|   cha|
|  chai|
| chair|
|     l|
|    la|
|   lam|
|  lamp|
|     t|
|    ta|
|   tab|
|  tabl|
| table|
+------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...