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<Row>
正确显示所有列和行的值都正确,但是 validatedDS Dataset<Row>
仅显示一列空值。
*预期输出:*
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 表