当前位置: 首页 > 知识库问答 >
问题:

带小数点的map和flatMap的行为

张丰
2023-03-14

考虑电影分级的数据集(userId、movieId、rating、timestamp)

1,1,4.0,964982703
1,3,4.0,964981247
1,223,3.0,964980985
1,231,5.0,964981179
1,1226,5.0,964983618
6,95,4.0,845553559
6,100,3.0,845555151
6,102,1.0,845555436
6,104,4.0,845554349
6,105,3.0,845553757
6,110,5.0,845553283
6,112,4.0,845553994
610,152081,4.0,1493846503
610,152372,3.5,1493848841
610,155064,3.5,1493848456
610,156371,5.0,1479542831
610,156726,4.5,1493848444
610,157296,4.0,1493846563
610,158238,5.0,1479545219
610,158721,3.5,1479542491
610,160080,3.0,1493848031
610,160341,2.5,1479545749
610,160527,4.5,1479544998

m = sc.textFile('movies/ratings_s.csv')

对于评级直方图,我知道我们可以做如下操作

scores = m.map(lambda line : line.split(',')[2])
sorted(scores.countByValue().items())

[('1.0',1),('2.5',1),('3.0',4),('3.5',3),('4.0',7),('4.5',2),('5.0',5)]

scores = m.flatMap(lambda line : line.split(',')[2])
sorted(scores.countByValue().items())

我得到的结果是

[('.',23),('0',17),('1',1),('2',1),('3',7),('4',9),('5',11)]

您能在这里帮助解释一下flatMap的行为吗:

为什么它会脱光“。并只保留完整的部分?我们不是要求用“。

我应该如何拿回.5分数的小数结果?

共有1个答案

朱季
2023-03-14

flatMap正在做的逻辑是什么?制造这样的结果,它“扁”了什么?

flatMap接受一个返回“集合”(例如列表)的函数。它本质上等同于执行映射以返回集合,该集合进一步扁平化到其单个元素中。在FlatMap示例中,函数lambda line:line.split(',')[2]将每一行转换为第三个拆分字符串,然后将该拆分字符串(视为字符集合)Flate转换为单个字符。

为什么它会脱光“。并只保留完整的部分?我们不是要求用“。

由于FlatMap的结果现在是每行第3个拆分字符串的单个字符列表,因此CountByValue()将对每个数字和小数点(作为字符)进行计数,从而得到报告的结果。

我应该如何拿回.5分数的小数结果?

m.map(lambda line : line.split(',')[2])
m.flatMap(lambda line : [line.split(',')[2]])
 类似资料:
  • 本文向大家介绍Swift 进阶 —— map 和 flatMap的使用,包括了Swift 进阶 —— map 和 flatMap的使用的使用技巧和注意事项,需要的朋友参考一下 map 和 flatMap 主要分在集合上的使用和在可选类型上的使用,下面分别来看下。 集合上使用 map 和 flatMap 先看如下的代码: 输入是一个一维数组,转换后 infos1 的结果是如下的一个二维数组,所以 m

  • 有人能给我解释一下map和flatMap之间的区别,以及什么是各自的好用例吗? “结果扁平化”是什么意思?它有什么好处?

  • 看起来map和flatMap返回不同的类型。 返回applySchema函数(或spark 1.3中的createDataFrame)所需的org.apache.spark.rdd.rdd[org.apache.spark.sql.row]。 但是,返回org.apache.spark.rdd.rdd[Any],我不能调用applySchema()。 如何在flatMap()之后使用applySc

  • 问题内容: 我的表中有以下列表。 我怎样才能得到小数点后的位数。 重复?: 我已经检查了现有的帖子,但是没有正确的方法来处理 数字 。 结果 编辑 :花了一些宝贵的时间后,我发现了一些相对简单的脚本来处理此问题。 问题答案: 我找到了一些简单的脚本(相对于我而言)来处理此问题。 此处仅用于处理不带小数部分的浮点数。如果没有没有小数部分的值,那么这很简单 希望对您有帮助。完整脚本如下

  • 我对spark(和编程)很陌生,所以如果你能帮助我理解这两个输出之间的区别,那就太好了。

  • 问题内容: 我有一个像这样的猫鼬计划… 我有2个问题… 当我尝试插入字符串“ abc”时,它会静默忽略此字段的插入。模式中的其余字段将成功插入。我的印象是它将抛出异常。有可能这样做吗? 如果我尝试插入5,它只是允许它,看来min和max根本没有起作用。 我想念什么? 问题答案: 该验证可以帮助你。下面是一个示例。 尝试插入时,出现以下错误 尝试插入时,出现以下错误