Поиск строк из столбца и создание нового столбца в кадре данных spark с результатами - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть датафрейм, состоящий из столбцов. Мне нужно проверить ссылку http и сохранить код значения в новом столбце с помощью искрового фрейма данных.

 Dataframe :  
colA    colB    ColC    colD  
A       B       C       a1.abc.com/823659)   a1.abc.com/823521)  
B       C       D       go.xyz.com/?LinkID=226971   a1.abc.com/823521)  
C       D       E       a1.abc.com/?LinkID=226971   go.xyz.com/?LinkID=226975  
Required Output:  
colA    colB    ColC    colD                                                   ColE  
A       B       C       a1.abc.com/823659)   a1.abc.com/823521)                823659,823521  
B       C       D       go.xyz.com/?LinkID=226971   a1.abc.com/823521)         226971,823521  
C       D       E       a1.abc.com/?LinkID=226971   go.xyz.com/?LinkID=226975  226971,226975  

df.withColumn("colE", regexp_extract(col("colD"), 'regex', ".com"

Я пытался использовать regexp_extract, не приводите шаблон в соответствие. Не могли бы вы помочь получить необходимый вывод.

1 Ответ

0 голосов
/ 10 февраля 2020

В любом случае, запустите это, вы можете добавить другие столбцы, и я не уверен в вашей строке, но предполагаю пробелы. Добавлено к исходному ответу.

import org.apache.spark.sql.functions._
import spark.implicits._

val df = Seq(("A", "a1.abc.com/823659)   a1.abc.com/823521 a1.abc.com/9999)"), ("B", "go.xyz.com/?LinkID=226971   a1.abc.com/823521)")   ).toDF("col1", "col2")
val df2 = df.withColumn("col3", split(col("col2"), " "))
val df3 = df2.select($"col1", $"col2", array_except($"col3", array(lit(""))).as("col3"))
val df4 = df3.withColumn("xyz", explode($"col3")).withColumn("leng", length($"xyz")) 
// Get values to right of .com
val df5 = df4.withColumn("xyz2", substring_index($"xyz", ".com", -1))
val df6 = df5.withColumn("col4", regexp_replace(df5("xyz2"), "[^0-9]", "")  )
val df7 = df6.select($"col1", $"col4")
val dfres = df7.groupBy("col1").agg(collect_list(col("col4")).as("col2"))
dfres.show(false)

возвращает по моим данным :

+----+----------------------+
|col1|col2                  |
+----+----------------------+
|B   |[226971, 823521]      |
|A   |[823659, 823521, 9999]|
+----+----------------------+
...