将Spark Row对象转换为Java Pojo

时间:2018-06-21 20:13:49

标签: java scala apache-spark apache-spark-sql

在Spark中,我们可以使用df.as [POJO]将数据集转换为Java POJO。

我有一个用例,其中我要联接两个数据集,并想将Row对象转换为Java POJO。

加入后的行对象架构:

-customerId
-messageId
-c1
-c2
-c3

Java POJO
根:
-customerId:字符串
-messageId:字符串
-内容:列表[地图]

转换后:
根:
-customerId
-messageId
-内容:[{c1:v1,c2:v2,c3:v3}]

当前我要遵循的方法是将Row对象转换为JSON,然后使用ObjectMapper将JSON转换为POJO,这是一个两步过程,转换成本很高,我们必须将此转换应用于十亿行。 / p>

是否有任何更好的方法可以将行对象转换为Java POJO,而无需转换为JSON,也无需使用反射或任何默认的Scala至Java转换器。我知道在Scala中我们有可用的“ asInstanceof”,但是我不确定Java中是否有类似的东西。

1 个答案:

答案 0 :(得分:0)

我认为您有以下这些: 两个Java bean类,简称A和B;和数据类型Dataset [A]和Dataset [B]。

您正在加入它们,结果是DataFrame(或Dataset [Row]),并且您想要将结果的Dataset类型转换回某种bean类。

最简单的方法是创建Java bean类(如果在应用程序中使用Scala,则创建案例类),其中包含A和B之间的所有联接字段(例如,将其命名为C)。并通过DataFrame.as [C]使用转换。

这将导致我了解您想要的内容,而无需与JSON进行中间转换。