Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
Python 带小数点的map和flatMap的行为_Python_Apache Spark_Pyspark_Mapreduce_Flatmap - Fatal编程技术网

Python 带小数点的map和flatMap的行为

Python 带小数点的map和flatMap的行为,python,apache-spark,pyspark,mapreduce,flatmap,Python,Apache Spark,Pyspark,Mapreduce,Flatmap,考虑这个电影分级数据集(userId、movieId、分级、时间戳) 对于评级直方图,我理解我们可以做如下操作 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)] 我尝试使用flatMap只是为了理解其中的区别: scores

考虑这个电影分级数据集(userId、movieId、分级、时间戳)

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

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)]

我尝试使用flatMap只是为了理解其中的区别:

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的行为:


  • flatMap的逻辑是什么?什么是“扁平化”来创造这样的结果

  • 为什么它会将“.”分开,只保留完整的部分?我们并不是要求以“.”分开

  • 我应该如何得到0.5分的小数结果


  • flatMap的逻辑是什么?什么是“扁平化”来创造这样的结果

    Answer-line.split(',')[2]返回一个字符串。Flatmap展平字符串(当您展平字符串时,您将获得字符,因为字符串是字符的组合),即从字符串中创建字符,这就是为什么您在输出中看到一个字符

    为什么它会将“.”分开,只保留完整的部分?我们并不是要求以“.”分开 答案-上面的答案解释了为什么“脱衣舞”

    我应该如何使用.5返回十进制结果 分数 答案-同样,上面的答案应该解释您需要做什么。对于处理数字,您可以进一步从字符串映射到数字,然后进行计算


    如果答案解决了,请接受。

    flatMap的逻辑是什么?它是如何“展平”来创建这样的结果的

    Answer-line.split(“,”)[2]返回字符串。Flatmap会展平字符串(展平字符串时,会得到字符集,因为字符串是字符的组合),即从字符串中创建字符集,这就是为什么在输出中会看到一个字符集

    为什么要把“分开”去掉,只保留不可分割的部分?我们不要求用“分开” 答案-上面的答案解释了为什么“脱衣舞”

    我应该如何使用.5返回十进制结果 分数 回答-同样,上面的回答应该解释你需要做什么。对于处理数字,您可以进一步从字符串映射到数字,然后进行计算

    如果问题解决了,请接受答案


    flatMap的逻辑是什么?什么是“扁平化”来创造这样的结果

    获取一个返回“集合”(例如列表)的函数。它本质上相当于执行一个
    映射
    ,将进一步展平的
    集合返回到单个元素中。在您的
    flatMap
    示例中,函数
    lambda line:line.split(',')[2]
    将每一行转换为第三个拆分字符串,该字符串(被视为一组字符)随后被
    展平为单个字符

    为什么它会将“.”分开,只保留完整的部分?我们并不是要求以“.”分开

    由于
    flatMap
    的结果现在是每行第三个拆分字符串的单个字符列表,
    countByValue()
    将对每个数字和小数点(作为字符)进行计数,因此报告结果

    我应该如何得到0.5分的小数结果

    如果要使用
    flatMap
    生成与
    map
    版本相同的结果:

    m.map(lambda line : line.split(',')[2])
    
    您需要使lambda函数返回所选拆分字符串的正确集合,如:

    m.flatMap(lambda line : [line.split(',')[2]])
    

    flatMap的逻辑是什么?什么是“扁平化”来创造这样的结果

    获取一个返回“集合”(例如列表)的函数。它本质上相当于执行一个
    映射
    ,将进一步展平的
    集合返回到单个元素中。在您的
    flatMap
    示例中,函数
    lambda line:line.split(',')[2]
    将每一行转换为第三个拆分字符串,该字符串(被视为一组字符)随后被
    展平为单个字符

    为什么它会将“.”分开,只保留完整的部分?我们并不是要求以“.”分开

    由于
    flatMap
    的结果现在是每行第三个拆分字符串的单个字符列表,
    countByValue()
    将对每个数字和小数点(作为字符)进行计数,因此报告结果

    我应该如何得到0.5分的小数结果

    如果要使用
    flatMap
    生成与
    map
    版本相同的结果:

    m.map(lambda line : line.split(',')[2])
    
    您需要使lambda函数返回所选拆分字符串的正确集合,如:

    m.flatMap(lambda line : [line.split(',')[2]])
    

    谢谢@Leo。我会在回家后再试,但我会在这里提出以下问题:1。我们是否可以说,如果我强制它是数字m.flatMap(lambda行:float(line.split(',')[2]),我们就不再有字符列表了?2.如果我使用第一列userId,map和flatMap将产生相同的结果,因为它是数字?@Kenny,1
    m.flatMap(lambda行:float(line.split(',')[2]))
    将崩溃,因为float不能被视为集合,但是
    flatMap
    需要一个返回一个的函数。同样,您可以通过将lambda函数更改为返回,例如,
    [float(line.split(',')[2])]
    使
    flatMap
    工作。2.是的,这取决于你的目标任何分割项目<只要给定的lambda函数具有正确的签名,code>flatMap
    就可以工作。谢谢@Leo。我会在回家后再试,但我会在这里提出以下问题:1。我们是否可以说,如果我强制它是数字m.flatMap(lambda行:float(line.split(',')[2]),我们就不再有字符列表了?2.如果我使用第一列userId、map和f