искра регулярное выражение при соединении фрейма данных - PullRequest
0 голосов
/ 21 декабря 2018

Мне нужно написать некоторое регулярное выражение для проверки состояния в искре при выполнении некоторого соединения,

Мое регулярное выражение должно соответствовать ниже строки

n3_testindia1 = test-india-1
n2_stagamerica2 = stag-america-2
n1_prodeurope2 = prod-europe-2

df1.select ("location1")..show ()

+----------------+
|    location1   |
+----------------+
|n3_testindia1   |
|n2_stagamerica2 |
|n1_prodeurope2  |

df2.select ("loc1"). diver.show ()

+--------------+
|      loc1    |
+--------------+
|test-india-1  |   
|stag-america-2|
|prod-europe-2 |
+--------------+

Я хочу присоединиться на основе столбцов местоположения, как показано ниже

val joindf = df1.join(df2, df1("location1") == regex(df2("loc1")))

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Вы можете разделить на «_» в location1 и взять элемент 2, а затем сопоставить со всей строкой «-» удаленной строки в loc1.Проверьте это:

scala> val df1 = Seq(("n3_testindia1"),("n2_stagamerica2"),("n1_prodeurope2")).toDF("location1")
df1: org.apache.spark.sql.DataFrame = [location1: string]

scala> val df2 = Seq(("test-india-1"),("stag-america-2"),("prod-europe-2")).toDF("loc1")
df2: org.apache.spark.sql.DataFrame = [loc1: string]

scala> df1.join(df2,split('location1,"_")(1) === regexp_replace('loc1,"-",""),"inner").show
+---------------+--------------+
|      location1|          loc1|
+---------------+--------------+
|  n3_testindia1|  test-india-1|
|n2_stagamerica2|stag-america-2|
| n1_prodeurope2| prod-europe-2|
+---------------+--------------+


scala>
0 голосов
/ 21 декабря 2018

На основании приведенной выше информации вы можете сделать это в Spark 2.4.0, используя

val joindf = df1.join(df2, 
  regexp_extract(df1("location1"), """[^_]+_(.*)""", 1) 
    === translate(df2("loc1"), "-", ""))

или в предыдущих версиях что-то вроде

val joindf = df1.join(df2, 
  df1("location1").substr(lit(4), length(df1("location1")))
    === translate(df2("loc1"), "-", ""))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...