Разделить URL-адрес сайта на несколько столбцов в scala фрейм данных - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть столбец с большим количеством URL, как показано ниже:

enter image description here

Мне нужно разделить эти столбцы на "." и задача состоит в том, чтобы получить следующее o / p:

enter image description here

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Проверьте ниже код.

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

scala> val df = Seq("www.google.co.kr","jun.artcompsci.org","mstdn.pssy.flab.fujitsu.cojp").toDF("URL")
df: org.apache.spark.sql.DataFrame = [URL: string]

scala> val adf = df.withColumn("url_array",split($"URL","\\.")).withColumn("length",size($"url_array")).orderBy($"length".desc)
adf: org.apache.spark.sql.Dataset[org.apache.spark.sql.Row] = [URL: string, url_array: array<string> ... 1 more field]

scala> val length = adf.select("length").head.getInt(0)
length: Int = 5

scala> adf.select($"*" +: (0 until length).map(i => $"url_array".getItem(i).as(s"col$i")): _*).show(false)
+----------------------------+----------------------------------+------+-----+----------+----+-------+----+
|URL                         |url_array                         |length|col0 |col1      |col2|col3   |col4|
+----------------------------+----------------------------------+------+-----+----------+----+-------+----+
|mstdn.pssy.flab.fujitsu.cojp|[mstdn, pssy, flab, fujitsu, cojp]|5     |mstdn|pssy      |flab|fujitsu|cojp|
|www.google.co.kr            |[www, google, co, kr]             |4     |www  |google    |co  |kr     |null|
|jun.artcompsci.org          |[jun, artcompsci, org]            |3     |jun  |artcompsci|org |null   |null|
+----------------------------+----------------------------------+------+-----+----------+----+-------+----+


0 голосов
/ 24 апреля 2020

www.google.co.kr это не URL, это часть URL, часть HOST. Например, URI будет: Разделить URL-адрес веб-сайта на несколько столбцов на scala фрейм данных

. Вы можете получить задачу следующим образом.

myDf.createOrReplaceTempView("table")
sqlContext.sql("""
               SELECT url,
                     IF(SIZE(SPLIT(url,'\\.')) > 1, SPLIT(url,'\\.')[0], 'NA') as Col1,
                         IF(SIZE(SPLIT(url,'\\.')) > 2, SPLIT(url,'\\.')[1], 'NA') as Col2,
                         IF(SIZE(SPLIT(url,'\\.')) > 3, SPLIT(url,'\\.')[2], 'NA') as Col3,
                         .....
                         IF(SIZE(SPLIT(url,'\\.')) > 6, SPLIT(url,'\\.')[5], 'NA') as Col6
               FROM table
               """)

Я надеюсь, что это дает вам несколько подсказок,

С уважением.

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