Spark DataFrame-如何从结构类型列获取特定字段



我有一个具有这样的结构的数据框架:

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) 

我想从数据框架中的所有行中检索所有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)
}

每次迭代中打印的列的内容看起来像:

[207400956,27FEB17,09.30.00]

但是column是类型的,我无法提取其任何字段。谁能告诉我在做什么错或应该遵循什么方法?

谢谢

如果您想提取npaNumber,则可以做

parquetFileDF.select($"npaHeaderData.npaNumber".as("npaNumber"))

您应该只有一个dataframe,只有npaNumber列。

您可以在DataFrame上调用select(),这将为您提供一个新的DataFrame,其中仅指定列

var newDataFrame = dataFrame.select(dataFrame("npaHeaderData.npaNumber").as("npaNumber"))

您可以按照下面的方式进行,这将避免[],同时从数据框中读取数据。

ids [dataframe]:{id,name}

val idRDDs = ids.rdd.map(x => x.getAs[String](0))
for(id <- idRDDs){
     id.map(x => println(x))
 }

上述方式将解决您的问题。

相关内容

  • 没有找到相关文章

最新更新