Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将spark行对象转换为java pojo_Java_Scala_Apache Spark_Apache Spark Sql - Fatal编程技术网

将spark行对象转换为java pojo

将spark行对象转换为java pojo,java,scala,apache-spark,apache-spark-sql,Java,Scala,Apache Spark,Apache Spark Sql,在Spark中,我们可以使用df.as[POJO]将数据集转换为JavaPOJO 我有一个用例,在这个用例中,我连接两个数据集,并希望将Row对象转换为javapojo 联接后的行对象架构: 根 -客户ID -messageId -c1 -c2 -c3 Java POJO 根: -customerId:字符串 -messageId:String -内容:列表[地图] 转换后: 根: -客户ID -messageId -内容:[{c1:v1,c2:v2,c3:v3}] 目前,我采用的方法是将行对象

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

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

联接后的行对象架构:

-客户ID
-messageId
-c1
-c2
-c3

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

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

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

有没有更好的方法可以将Row对象转换为javapojo而不转换为JSON,也不使用反射,或者默认情况下可以使用Scala-to-Java转换器。我知道Scala中有可用的“asInstanceof”,但我不确定Java中是否有类似的功能。

我假设您有以下功能: 两个javabean类,简称A和B;以及数据集[A]和数据集[B]类型的数据

您正在连接它们,结果是DataFrame(换句话说就是Dataset[Row]),您希望将结果数据集类型转换回某个bean类

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


这将产生我所理解的您想要的结果,而无需在JSON之间进行中间转换。

您想要实现什么还不太清楚,代码中的示例会更好。但是,当我将Dataset[A]和Dataset[B]连接起来时,它将生成包含两个Dataset中所有列的row对象。现在我的POJO有不同的结构,所以我不能直接使用.as[C]。相反,我使用的是.map()函数,它接收行对象并输出POJO。根据给出的POJO示例,我必须从连接的数据集中自定义映射内容。另外,我不确定.as[C]是否能给我预期的结果。是什么阻止了你尝试这个方法?