Spark Streaming - 访问 Spark SQL 数据帧中的自定义案例 class 对象数组

Spark Streaming - Accessing an array of custom case class objects in a Spark SQL dataframe

在我的 Spark Streaming 查询中,我想使用一个名为 URL 的案例 class,其中包含 3 个字符串成员,如下所示:

  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 个对象的数组。

稍后,我想对此列应用转换,将其转换为字符串列表,根据其他列中的值,字符串列表可以是 domaintopLevelDomain

首先,是否可以有一列是 case class 对象的数组?如果是,如何应用上述转换将其缩减为字符串数组?

如果要使用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*/ })}