Конкатенация произвольного числа разделенных столбцов в Spark - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь проанализировать некоторые примеры файлов журнала в формате ниже в Spark DataFrame.

66.249.69.97 - - [24/Sep/2014:22:25:44 +0000] "GET /071300/242153 HTTP/1.1" 404 514 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
71.19.157.174 - - [24/Sep/2014:22:26:12 +0000] "GET /error HTTP/1.1" 404 505 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36"

Я делю по пробелам, а затем вытаскиваю различные поля (мой код ниже),Тем не менее, я сталкиваюсь с неприятностями, когда добираюсь до поля агента пользователя, потому что, когда оно разделено пробелами, оно может быть переменным числом полей (это в основном все после URL-адреса реферера).Есть ли способ использовать getItem(), чтобы забрать все оставшиеся предметы после определенного индекса?Или есть лучший подход к этому?(Я довольно новичок в Spark).

import org.apache.spark.sql.functions._
var logs = spark.read.textFile("my_log_file.txt")
var splitLogs = logs.map(line => line.replace("\"", ""))
    .map(line => line.replace("[", ""))
    .map(line => line.split(" "))
    .withColumn("ip", col("value").getItem(0))
    .withColumn("date", col("value").getItem(3))
    .withColumn("request_type", col("value").getItem(5))
    .withColumn("requested_url", col("value").getItem(6))
    .withColumn("status_code", col("value").getItem(8))
    .withColumn("bytes_transferred", col("value").getItem(9))
    .withColumn("referrer_url", col("value").getItem(10))
    .withColumn("browser", concat_ws(" ", 
         col("value").getItem(11), 
         col("value").getItem(12), 
         col("value").getItem(13), 
         col("value").getItem(14)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...