Spark Dataframe - 如何从一行中的列中获取特定字段

Ign*_*rre 3 scala apache-spark apache-spark-sql

我有一个结构如下的数据框:

root
 |-- npaDetails: struct (nullable = true)
 |    |-- additionalInformation: struct (nullable = true)
 |    |-- npaStatus: struct (nullable = true)
 |    |-- npaDetails: struct (nullable = true)
 |-- npaHeaderData: struct (nullable = true)
 |    |-- npaNumber: string (nullable = true)
 |    |-- npaDownloadDate: string (nullable = true)     
 |    |-- npaDownloadTime: string (nullable = true) 
Run Code Online (Sandbox Code Playgroud)

我想npaNumber从数据框中的所有行中检索所有内容。

我的方法是遍历数据框中的所有行,为每一行提取npaHeaderData字段中列中存储的值npaNumber。所以我编写了以下几行代码:

parquetFileDF.foreach { newRow =>  

  //To retrieve the second column
  val column = newRow.get(1)

  //The following line is not allowed
  //val npaNumber= column.getAs[String]("npaNumber")  

  println(column)

}
Run Code Online (Sandbox Code Playgroud)

每次迭代打印的列的内容如下所示:

[207400956,27FEB17,09.30.00]

column属于 Any 类型,我无法提取其任何字段。谁能告诉我我做错了什么或者我应该遵循什么方法而不是这种方法?

谢谢

Ram*_*jan 5

如果您只想提取,npaNumber那么您可以这样做

parquetFileDF.select($"npaHeaderData.npaNumber".as("npaNumber"))
Run Code Online (Sandbox Code Playgroud)

你应该只有一个dataframewithnpaNumber列。