scala - Scala - 如何获取和打印 Either 的内容?
问题描述
我正在处理某些记录可能已损坏的数据。所以我决定探索数据并用来Either
划分有效和无效记录。
我想出了如何计算每种记录的数量,现在成功地获得了failedCount
输出successCount
。
但我在打印每条无效(左)销售记录时遇到问题。我的方法可能有什么问题?
打印时我没有得到任何输出failedSales
def filterSales(rawSales: RDD[Sale]): RDD[(String, Sale)] = {
val filteredSales = rawSales
.map(sale => {
val saleOption = Try(sale.id -> sale)
saleOption match {
case Success(successSale) => Right(successSale)
case Failure(e) => Left(s"Corrupted sale: $sale;", e)
}
})
val failedCount: Long = filteredSales.filter(_.isLeft).count()
val successCount: Long = filteredSales.filter(_.isRight).count()
println("FAILED SALES COUNT: " + failedCount)
println("SUCCESS SALES COUNT: " + successCount)
// Problem here
val failedSales: RDD[Either.LeftProjection[(String, Throwable), (String, Sale)]] = filteredSales.map(_.left)
println("FAILED SALES: ")
// Doesn't produce any output
failedSales.foreach(println)
}
解决方案
当您调用foreach(fn)
RDD 时,该功能fn
(println
在您的情况下)在分布 RDD 的从节点上执行。所以它发生在某个地方,但不在你正在查看的驱动程序上。
如果您有一个小数据集,那么您可以collect()
使用 RDD,以便将数据返回给您的驱动程序,您可以println
这样做。
如果您有大数据,您可以将saveAsTextFile()
其写入 HDFS,然后您可以从那里下载。
推荐阅读
- reactjs - 从自动完成中检索第一个预测?
- javascript - 我的 react 应用程序中有一个 google chrome 扩展程序。我需要知道文档的哪一部分可以帮助我
- qt - qwt 中 YAxis 图中的多个范围
- json - JSON 模式 - 基于另一个下拉菜单在下拉菜单中显示值
- python - 在 pygame 中使用精灵
- visual-studio-2019 - IntelliSense 完成初始化,但尝试加载文档时发生错误。连接到命名管道时超时
- ansible - 如果变量列表中的引用文件存在,则有条件地包含模板行
- nestjs - Fastify 模式下 NestJS 动态模板渲染 - res.render 不是函数
- mysql - 查询中 MySQL 变量定义的 PostgreSQL 等效项
- python - 确定从哪里启动 python 脚本