Как извлечь значения из ключевой карты значений, спаркфрейм - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть столбец с картой, где меняется ключ и значение.Я пытаюсь извлечь значение и создать новый столбец.Ввод

---------------+
|symbols        |
+---------------+
|[3pea -> 3PEA] |
|[barello -> BA]|
|[]             |
|[]             |
+---------------+

Ожидаемый вывод

---------------+
|symbols        |
+---------------+
|3PEA         |
|BA           |
|             |
|            |
+---------------+

Вот то, что я до сих пор пытался использовать UDF

def map_value=udf((inputMap:Map[String,String])=> {inputMap.map(x=>x._2) 
      }) 

, но это дает мне

java.lang.UnsupportedOperationException: Schema for type scala.collection.immutable.Iterable[String] is not supported

1 Ответ

0 голосов
/ 23 ноября 2018
import org.apache.spark.sql.functions._
import spark.implicits._
val m = Seq(Array("A -> abc"), Array("B -> 0.11856755943424617"), Array("C -> kqcams"))

val df = m.toDF("map_data")
df.show
// Simulate your data I think.

val df2 = df.withColumn("xxx", split(concat_ws("",$"map_data"), "-> ")).select($"xxx".getItem(1).as("map_val")).drop("xxx")
df2.show(false)

Результат:

+--------------------+
|            map_data|
+--------------------+
|          [A -> abc]|
|[B -> 0.118567559...|
|       [C -> kqcams]|
+--------------------+

+-------------------+
|map_val            |
+-------------------+
|abc                |
|0.11856755943424617|
|kqcams             |
+-------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...