我正在尝试通过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文档中的相同示例。
答案 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")