这是mi首次尝试使用Python。我正在尝试将Python与Apache Spark结合使用。
这就是我想要做的:
l = sc.textFile("/user/cloudera/dataset.txt")
l = l.map(lambda x: map(int, x))
然后我使用笛卡尔函数来获取所有可能的元素组合
lc = l.cartesian(l)
现在我为每对夫妇应用一个函数:
output = lc.map(lambda x: str(x[0]) + ";" + str(x[1]) + ";" + str(cosineSim(x[0], x[1])))`
我的目标是获得像这样的字符串:
element1; element1; similarity
element1; element2; similarity
...
等等..
当我调用output.first()时,这是我的输出:
[45, 12, 7, 2, 2, 2, 2, 4, 7];[45, 12, 7, 2, 2, 2, 2, 4, 7];1.0
这是一个字符串,的确,如果我这样做:
s = output.first()
type(s)
<type 'str'>
但是如果我执行output.collect()或output.saveAsTextFile(path),则会出现此错误:
15/02/13 06:06:18 WARN TaskSetManager: Lost task 1.0 in stage 61.0 (TID 183, 10.39.127.148): org.apache.spark.api.python.PythonException: Traceback (most recent call last):
File "/usr/lib/spark/python/pyspark/worker.py", line 107, in main
process()
File "/usr/lib/spark/python/pyspark/worker.py", line 98, in process
serializer.dump_stream(func(split_index, iterator), outfile)
File "/usr/lib/spark/python/pyspark/serializers.py", line 227, in dump_stream
vs = list(itertools.islice(iterator, batch))
File "<stdin>", line 2, in <lambda>
ValueError: invalid literal for int() with base 10: ''
怎么了?
最佳答案
我认为此公式一定有错误:
l = l.map(lambda x: map(int, x))
您可以检查l RDD是否始终具有值(否”)吗?如果不是,则会出现一个典型的Python错误:
>在[32]中:int('')
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) in () ----> 1 int('')
ValueError: invalid literal for int() with base 10: ''
继续前进,请记住映射是惰性计算,这意味着直到指示了下一个 Action (收集和保存是 Action )时才计算它们。
关于python - PySpark,调用saveAsTextFile时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28501504/