Apache Spark - 在java中返回空数据集的映射函数

Posted

技术标签:

【中文标题】Apache Spark - 在java中返回空数据集的映射函数【英文标题】:Apache Spark - Map function returning empty dataset in java 【发布时间】:2018-07-27 08:45:43 【问题描述】:

我的代码:

finalJoined.show();

Encoder<Row> rowEncoder = Encoders.bean(Row.class);                             
Dataset<Row> validatedDS = finalJoined.map(row -> validationRowMap(row), rowEncoder);       
validatedDS.show();

地图功能:

public static Row validationRowMap(Row row) 

        //PART-A validateTxn()

        System.out.println("Inside map");
        //System.out.println("Value of CIS_DIVISION is " + row.getString(7));

        //1. CIS_DIVISION
        if ((row.getString(7)) == null || (row.getString(7)).trim().isEmpty()) 
            System.out.println("CIS_DIVISION cannot be blank.");
        

return row;


输出:

finalJoined Dataset&lt;Row&gt; 正确显示所有列和行的值都正确,但是 validatedDS Dataset&lt;Row&gt; 仅显示一列空值。

*预期输出:*

validatedDS 也应该显示与 finalJoined 数据集相同的值,因为我只是在 map 函数内部执行验证,而不是更改数据集本身。

如果您需要更多信息,请告诉我。

【问题讨论】:

【参考方案1】:

Encoders.bean 旨在与 Bean 类一起使用。 Row 不是其中之一(没有为特定字段定义 setter 和 getter,仅定义通用 getter)。

要返回 Row 对象,您必须使用 RowEncoder 并提供预期的输出架构。

检查例如Encoder for Row Type Spark Datasets

【讨论】:

以上是关于Apache Spark - 在java中返回空数据集的映射函数的主要内容,如果未能解决你的问题,请参考以下文章

在 spark java api( org.apache.spark.SparkException ) 中使用 filter(),map(),... 时出错

如何在 Apache-Spark 2.x 中使用 java 进行增量序列

如何在 java 中使用 Apache spark 计算中位数和众数?

在 Apache Spark 中,用 Java 将数据帧写入 Hive 表

如何使用 Java API 将文本文件、图像存储到 Apache Spark 中?

如何在Spark提交中使用s3a和Apache spark 2.2(hadoop 2.8)?