как создать столбец из существующего в искре - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь добавить столбец в набор данных, вычисляя его из существующего:

val test=Seq("aaxxx","bbxxx","ccxxx").toDF
test.show : 
+-----+
|value|
+-----+
|aaxxx|
|bbxxx|
|ccxxx|
+-----+

вот что я хочу:

+-----+----+
|value|val2|
+-----+----+
|aaxxx|aa  |
|bbxxx|bb  |
|ccxxx|cc  |
+-----+----+

для этого я пробовал:

val column =test.select("value").as[String].map(e=>e.substring(0,2)).col("value")
test.withColumn("value2", column)

но я получаю:

org.apache.spark.sql.AnalysisException: Значение # 10 разрешенных атрибутов отсутствует в значении # 1 в операторе! Project [значение # 1, значение # 10 AS value2. # 17].Атрибуты с тем же именем появляются в операции: значение.Пожалуйста, проверьте, правильно ли используются атрибуты. ;;! Project [value # 1, value # 10 AS value2. # 17] + - LocalRelation [value # 1]

может кто-нибудь увидеть, в чем проблема с моим кодом, или иметьлучший способ получить нужный результат?

Ответы [ 3 ]

1 голос
/ 24 сентября 2019

вы можете использовать подстроку функции spark sql для получения первых двух символов:

import org.apache.spark.sql.function.{substring, col}
val newDf = test.withColumn("val2", substring(col("value"), 0, 2))
1 голос
/ 24 сентября 2019

используйте withcolumn с подстрокой

scala> val test=Seq("aaxxx","bbxxx","ccxxx").toDF

scala> test.show()
+-----+
|value|
+-----+
|aaxxx|
|bbxxx|
|ccxxx|
+-----+

scala> test.withColumn("val2",substring(col("value"),1,2)).show
+-----+----+
|value|val2|
+-----+----+
|aaxxx|  aa|
|bbxxx|  bb|
|ccxxx|  cc|
+-----+----+

надеюсь, это поможет вам

0 голосов
/ 24 сентября 2019

Вот три способа сделать это:

1) Использование функции substring, которую необходимо импортировать

import org.apache.spark.sql.functions.{substring}

test.withColumn("value2", substring($"value", 0, 2))

2) Вызов метода substr onобъект столбца

test.withColumn("value2", $"value".substr(0, 2))

3) Использование выражения SQL:

test.selectExpr("value", "substring(value, 0, 2) AS value2")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...