我有一个具有这样的结构的数据框架:
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))
}
上述方式将解决您的问题。