在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中是否有类似的东西可用。
我假设您有这些:两个Javabean类,简称A和B;以及Dataset[A]和Dataset[B]类型的数据。
您正在加入它们,结果是DataFrame(或换句话说,Dataset[Row]),并且您希望将生成的Dataset类型转换回某个bean类。
最简单的方法是创建Javabean类(如果您在应用程序中使用Scala,则为case类),其中包含A和B之间的所有连接字段(例如命名为C)。并通过DataFrame.as[C]使用转换。
这将导致我理解你想要的没有中间转换和JSON。