2016-11-27 29 views
3

我想使用mongoDB連接器在SPARK中執行python文件。 python文件做一個查詢來從mongoDB獲取一些數據,並且它們用SPARK中的映射操作處理這些數據。socket.timeout mongoDB pyspark

執行停止獲取此錯誤消息:「socket.timeout:超時」,而正在執行映射操作。這是輸出我得到:

回溯(最近通話最後一個):文件 「/home/ana/computational_tools_for_big_data/project/review_analysis.py」, 27行,在 bad_reviews = reviews_1.rdd。 map(lambda r:r.text).collect()文件「/usr/local/spark/python/lib/pyspark.zip/pyspark/rdd.py」,第777行,在 收集文件 「/ usr/local /spark/python/lib/pyspark.zip/pyspark/rdd.py「,第142行,在 _load_from_socket文件中」/usr/local/spark/python/lib/pyspark.zip/pyspark/serializers.py「,行 139,在load_stream文件中 「/usr/local/spark/python/lib/pyspark.zip/pyspark/serializers.py」,行 156,in _read_with_length文件 「/usr/local/spark/python/lib/pyspark.zip/pyspark/serializers.py」,行 543,位於read_int文件中「/usr/lib/python2.7/socket.py 」行384,在 讀 數據= self._sock.recv(左)socket.timeout:超時

我得到這個問題,因爲我查詢它的文件是非常大的2.3GB,我試過與1GB的文件相同,這是同樣的問題,但它是與400MB的較小文件的作品。

是否可以更改超時時間或使其工作? 有沒有其他方式可以更快處理大量數據?

回答

0

你的問題是套接字連接比指定的超時花費更多的時間。 請參閱此文檔以更改超時和其他設置。

要更改

socketTimeoutMS屬性:(整數或無)控制驅動程序將多長時間(毫秒)發送 普通(非監控)數據庫之後等待響應在得出 網絡錯誤發生之前進行操作。默認爲None(無超時)。

E.g. MongoClient('localhost',27017,socketTimeoutMS = 6000)

當然,根據2.3GB文件傳輸實際需要多少時間,你可能希望超過一分鐘(6000),我在例。PyMongo MongoClient的MongoClient

文檔https://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html

文檔

http://api.mongodb.com/python/current/api/pymongo/mongo_client.html