传递给map的函数永远不会被调用

时间:2016-10-26 11:13:15

标签: python-3.x apache-spark pyspark

我正在尝试通过spark中提供的map函数进行函数调用。 我做了火花教程页面(https://spark.apache.org/docs/1.2.0/programming-guide.html)中给出的内容。但函数myFunc永远不会被调用。至少这就是我的想法。我不知道我做错了什么或错过了什么。 这是以下代码:

from pyspark import SparkContext
if __name__ == "__main__":
    def myFunc(s):
        print("@@")
        words = s.split("\n")
        print("##")
        return len(words)


    sc = SparkContext("local","test")
    sc.textFile("C:\\TestLogs\\sample.log").map(myFunc)
    print("**")

输出:

**

实际上,除了文件位置之外,这是spark文档中的相同示例。

2 个答案:

答案 0 :(得分:1)

您好像没有被称为行动只是转化map(myFunc)

  

Spark 中的所有转换都是懒惰的,因为它们不会计算   他们的结果马上。相反,他们只是记得   转换应用于某些基础数据集(例如文件)。该   转换只有在动作需要结果时才能计算出来   被送回司机程序。

尝试使用map(myFunc).saveAsTextFile("folder/here.txt")或您想要使用的其他action

答案 1 :(得分:0)

您的代码似乎缺乏火花"动作" (例如"收集")这是执行转换所必需的(例如" map")。

尝试以下方法:

from pyspark import SparkContext
if __name__ == "__main__":
    def myFunc(s):
        print("@@")
        words = s.split("\n")
        print("##")
        return len(words)


    sc = SparkContext("local","test")
    myrdd = sc.textFile("C:\\TestLogs\\sample.log")
    result =  myrdd.map(myFunc).collect()
    print "the result is"
    print result
    print("**")

考虑更新以下内容以保存"文件:\\" (https://stackoverflow.com/a/27301040/5088142

    myrdd = sc.textFile("file:\\C:\\TestLogs\\sample.log")