2016-08-18 68 views
2

我行RDD看起来是这样的:如何访问elemens横栏RDD在SCALA

Array[org.apache.spark.sql.Row] = Array([1,[example1,WrappedArray([**Standford,Organisation,NNP], [is,O,VP], [good,LOCATION,ADP**])]]) 

我从转换数据帧到RDD了这一点,数据帧的模式是:

root 
|-- article_id: long (nullable = true) 
|-- sentence: struct (nullable = true) 
| |-- sentence: string (nullable = true) 
| |-- attributes: array (nullable = true) 
| | |-- element: struct (containsNull = true) 
| | | |-- tokens: string (nullable = true) 
| | | |-- ner: string (nullable = true) 
| | | |-- pos: string (nullable = true) 

现在怎么办在rowd中访问元素,在dataframe中我可以使用df.select(“sentence”)。我期待访问像斯坦福/其他嵌套元素的元素。

+0

在'RDD [行]元素'是'的Row's。您可以像RDD [String]或RDD [Int]这样的其他RDD访问它们。 –

+0

@ SarveshKumarSingh-你能告诉我如何访问pos的例子 –

+1

如果给定的答案解决了你的问题,请接受它,否则评论为什么它为你工作! – eliasah

回答

6

由于@SarveshKumarSingh在评论中写道,您可以访问RDD[Row]中的行,就像访问RDD中的任何其他元素一样。访问行中的元素可以通过几种方法完成。无论是简单地调用get这样的:

rowRDD.map(row => row.get(2).asInstanceOf[MyType]) 

,或者如果它是在型构建,就能避免类型转换:

rowRDD.map(row => row.getList(4)) 

,或者你可能想简单地使用模式匹配,如:

rowRDD.map{case Row(field1: Long, field2: MyType) => field2} 

我希望这有助于:)

+0

是的,它可以帮助,你也可以告诉我,如果我可以直接转换数据帧对象到PUT或我需要先将其转换为RDD。我想将此数据框保存在Hbase中。 –