Spark Streaming - доступ к массиву объектов класса пользовательских дел в кадре данных Spark SQL - PullRequest
0 голосов
/ 06 января 2020

В моем запросе Spark Streaming я хотел бы использовать класс дел с именем URL с тремя строковыми членами следующим образом:

  url: string            
  domain: string         
  topLevelDomain: string 

Я хотел бы создать DataFrame, где один из членов является массив объектов URL. Схема выглядит следующим образом:

root
 |-- AccountId: integer (nullable = true)
 |-- url1: struct (nullable = true)
 |    |-- url: string (nullable = true)
 |    |-- domain: string (nullable = true)
 |    |-- topLevelDomain: string (nullable = true)
 |-- finalURLs: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- url: string (nullable = true)
 |    |    |-- domain: string (nullable = true)
 |    |    |-- topLevelDomain: string (nullable = true)

Столбец finalURLs представляет собой массив объектов URL.

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

Прежде всего, возможно ли иметь столбец, который является массивом объектов класса case? Если да, как можно применить приведенное выше преобразование, чтобы уменьшить его до массива строк?

1 Ответ

0 голосов
/ 06 января 2020

Если вы хотите использовать case-классы, вам нужно преобразовать DataFrame в набор данных. Если вы это сделаете, вам нужно конвертировать всю запись, а не только URL. Примерно так будет работать:

case class URL(url:String, domain:String, topLevelDomain:String)
case class MyRow(AccountId:Int, url1:URL, finalURLs:Seq[URL])

df.as[MyRow].map{case MyRow(accountId,url1,finalURLs) => (accountId,url1,finalURLs.map{case URL(url,domain,topLevelDomain) => /*your logic here*/ })}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...