提问者:小点点

将火花行对象转换为javapojo


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

我有一个用例,我正在连接两个数据集,并希望将Row对象转换为JavaPOJO。

加入后的行对象架构:
root
-CusterId
-MessageId
-c1
-c2
-c3

JavaPOJO
根:
-客户ID:字符串
-消息ID:字符串
-内容:列表[地图]

转换后:
root:
-CusterId
-MessageId
-content:[{c1: v1,c2:v2,c3:v3}]

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

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


共1个答案

匿名用户

我假设您有这些:两个Javabean类,简称A和B;以及Dataset[A]和Dataset[B]类型的数据。

您正在加入它们,结果是DataFrame(或换句话说,Dataset[Row]),并且您希望将生成的Dataset类型转换回某个bean类。

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

这将导致我理解你想要的没有中间转换和JSON。