Spark 访问 Row 对象值
Spark access Row object value
我想按分区迭代数据帧,并为每个分区迭代其所有行并创建一个 deleteList ,其中将包含 HBase 的每一行的删除对象。
我将 Spark 和 HBase 与 Java 一起使用,并使用以下代码创建了一个 Row 对象:
df.foreachPartition((ForeachPartitionFunction<Row> iterator -> {
while (iterator.hasNext()) {
Row row = RowFactory.create(iterator.next());
deleteList.add(new Delete(Bytes.toBytes(String.valueOf(row))));
}
}
但它不起作用,因为我无法正确访问行的值。而 df 有一列名为“hbase_key”。
很难从你的 post 中分辨出 class 到底是 Row
,但我怀疑它是 org.apache.spark.sql.Row
?
如果是这种情况,请尝试 getString(i)
或类似的方法,其中 i 是您尝试访问的行中列的索引。
同样,根据您配置 Hbase 访问的方式,我怀疑在您的情况下,0 索引将是物理 HBase table 的行键的值,后续索引将是与您的行一起返回的相应列值。但同样,这将取决于您在代码中到达这一点的准确程度。
您的 Row
对象还应具有访问其他数据类型的方法,例如 getInt(i)
等
我想按分区迭代数据帧,并为每个分区迭代其所有行并创建一个 deleteList ,其中将包含 HBase 的每一行的删除对象。 我将 Spark 和 HBase 与 Java 一起使用,并使用以下代码创建了一个 Row 对象:
df.foreachPartition((ForeachPartitionFunction<Row> iterator -> {
while (iterator.hasNext()) {
Row row = RowFactory.create(iterator.next());
deleteList.add(new Delete(Bytes.toBytes(String.valueOf(row))));
}
}
但它不起作用,因为我无法正确访问行的值。而 df 有一列名为“hbase_key”。
很难从你的 post 中分辨出 class 到底是 Row
,但我怀疑它是 org.apache.spark.sql.Row
?
如果是这种情况,请尝试 getString(i)
或类似的方法,其中 i 是您尝试访问的行中列的索引。
同样,根据您配置 Hbase 访问的方式,我怀疑在您的情况下,0 索引将是物理 HBase table 的行键的值,后续索引将是与您的行一起返回的相应列值。但同样,这将取决于您在代码中到达这一点的准确程度。
您的 Row
对象还应具有访问其他数据类型的方法,例如 getInt(i)
等