如何从 java spark sql 中的 Row 获取具有正确数据类型的属性值

How to get attribute value with correct datatype from Row in java spark sql

提问人:chingu 提问时间:7/8/2023 最后编辑:chingu 更新时间:7/8/2023 访问量:111

问:

我正在使用 Spark Java(不是 scala 或 python)。

我有一个数据帧,我想从行访问特定字段。如果它是 String,我已经能够获得字段值,但我不知道如果它是 Long、Int 该怎么办......等。如果它是 String 属性,以下是我访问它的方法:(Dataset<Row>)

final String id = row.getAs("id").toString();

Row 方法是否也可以用于其他数据类型?我不知道它是否可以正确输入检索到的值。如果在我查询的数据库中,quantity 类型为 Long,那么我也想从 Row 中检索它作为 Long 类型。如:getAs()

final Long quantity = row.getAs("quantity");

我看到有像 这样的 Row 方法,但我不知道如何使用它们,因为这些方法需要 int。我只有要访问的值的字段名称,因此我只能传入字段名称字符串。getLong()getInt()

apache-spark apache-spark-sql spark-java

评论


答:

1赞 Medzila 7/8/2023 #1

getAs(column) 方法已经给出了列值的类型,那么如果你知道它,你可以直接转换它来处理它。

Long myId = (Long)row.getAs("id")

其他方法依赖于值的索引,因此,如果您有一个包含这些列的数据集:

长 ID |字符串值

然后,您可以使用:

row.getLong(0)
row.getString(1)

查看更多: https://spark.apache.org/docs/2.1.0/api/java/org/apache/spark/sql/Row.html#getAs(java.lang.String)