PySpark,调用saveAsTextFile时出错

时间:2015-02-13 14:11:44

标签: python hadoop apache-spark

这是使用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: ''

出了什么问题?

1 个答案:

答案 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;

继续前进,请记住地图是懒惰的评估,这意味着在指示下一个操作(收集并保存动作)之前不会计算它们。