2017-08-30 58 views
1

我有这样一个结构的数据帧:星火据帧 - 如何从一列的特定领域连续

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是键入Any并且我不能提取它的任何字段。任何人都可以告诉我做错了什么,或者我应该遵循什么方法而不是这个?

感谢

+1

做一个新的数据帧,是点? –

+0

@MehdiBenHamida我需要在我的算法的第一步,从列中检索一个字段,因为我将使用该值作为今后opperations参考。所以我需要保留所有列。但是,对于这一步,你是对的,我可以选择我的第二列。 –

回答

1

如果你正在寻找只提取npaNumber那么你可以做

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

您应该只有一个dataframenpaNumber列。

+0

我会尝试。后来我还需要其他专栏,但作为第一步,这将起作用。谢谢! –

+0

只是一个评论,我想你们都忘了$“npaHeaderData.npaNumber”。至少我的IDE抱怨,因为那是 –

+0

你是正确的:) –

1

你可以打电话select()的数据帧,这将给你只指定的列你想从一个多列数据帧获得与一列的数据帧

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

第一个 –

+0

都是一样的,可能是两者都平行 –

+0

烨回答,@RameshMaharjan感谢您指出,更新了我的答案是 –