искровый анализ массива элементов и сравнение соответствующего поля - PullRequest
0 голосов
/ 02 сентября 2018

У меня есть фрейм данных, как показано ниже, столбец uinfo - это массив, и я хочу иметь условие ниже 1. Когда первый элемент массива имеет значение id.name , возьмите второй элемент массива user1 и значение столбца id1 и создайте новый фрейм данных

  1. если значение id1 равно null , тогда принять id2 значение

    +-----------------+----------+--------+-----+-------+
    |            uinfo           |   count| id1 |   id2 |
    +-----------------+----------+--------+-----+-------+
    |   [id.name, user1, example]|       1| aijk|   null|
    |   [id.name, user2]         |       3| null|   bcdk|
    |   [id.value, overflow]     |       6| 123k|   null|
    |   [id.name, user3]         |       7| klmn|   null|
    +-----------------+----------+--------+-----+-- ----+ 
    

итоговый фрейм данных должен выглядеть ниже

+-----------------+--------------+                                                   
|   uinfo         |      customid|
+-----------------+--------------+
|   user1         |          aijk|
|   user2         |          bcdk|
|   user3         |          klmn| 
+-----------------+--------------+

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Пожалуйста, найдите решение ниже

df.withColumn("customid",when(col("uinfo")(0) === "id.name" && !col("id1").isNull,col("id1")).otherwise(col("id2"))).withColumn("uinfo", when(col("uinfo")(0) === "id.name",col("uinfo")(1))).filter(!col("uinfo").isNull).drop("id1","id2","count").show
0 голосов
/ 02 сентября 2018

Это должно сделать то, что вам нужно:

df
.select(
  when($"uinfo"(0)==="id.name",$"uinfo"(1)).as("uinfo"),
  coalesce($"id1",$"id2").as("customid")
)
.where($"uinfo".isNotNull)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...