这是使用Python的第一次尝试。我试图在Apache Spark中使用python。 这就是我想要做的事情:
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: ''
出了什么问题?
答案 0 :(得分:0)
我认为这个公式中一定有错误:
l = l.map(lambda x:map(int,x))
您能否检查l RDD是否始终具有值(不是&#39;&#39;)?如果没有,则会出现典型的Python错误:
&GT;在[32]中:int(&#39;&#39;)
----------------------------------------------- ---------------------------- ValueError Traceback(最近一次调用 最后)in() ----&GT; 1 int(&#39;&#39;)
ValueError:基数为10的int()的文字无效:&#39;&#39;
继续前进,请记住地图是懒惰的评估,这意味着在指示下一个操作(收集并保存动作)之前不会计算它们。