我正在尝试使用mongoDB连接器在SPARK中执行python文件。 python文件执行查询以从mongoDB获取一些数据,并使用SPARK中的映射操作处理此数据。
执行停止收到此错误消息:" socket.timeout:timed out",正在执行映射操作。这是我得到的输出:
Traceback(最近一次调用最后一次):文件 " /home/ana/computational_tools_for_big_data/project/review_analysis.py" ;, 第27行,在 bad_reviews = reviews_1.rdd.map(lambda r:r.text).collect()File" /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 File" /usr/local/spark/python/lib/pyspark.zip/pyspark/serializers.py" ;, line 139,在load_stream文件中 " /usr/local/spark/python/lib/pyspark.zip/pyspark/serializers.py" ;, line 156,在_read_with_length文件中 " /usr/local/spark/python/lib/pyspark.zip/pyspark/serializers.py" ;, line 543,在read_int文件" /usr/lib/python2.7/socket.py" ;,第384行,in 读 data = self._sock.recv(left)socket.timeout:timed out
我遇到了这个问题,因为我查询它的文件非常大2.3GB,我尝试了同样的1GB文件,这是同样的问题,但它适用于400MB的较小文件。
是否可以更改超时或其他功能以使其正常工作? 还有其他方法可以更快地处理大量数据吗?
答案 0 :(得分:0)
您的问题是套接字连接所花费的时间超过指定的超时时间。 请参阅此文档以更改超时和其他设置。
您要更改的媒体
socketTimeoutMS:(整数或无)控制驱动程序在发送后等待响应的时间(以毫秒为单位) 普通(非监控)数据库操作在得出结论之前 发生了网络错误。默认为无(无超时)。
E.g。 MongoClient('localhost',27017,socketTimeoutMS = 6000)
当然,根据2.3GB文件传输实际需要多长时间,您可能需要超过一分钟(6000),我在示例中提到过。
MongoClient的文档
https://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html
PyMongo MongoClient的文档
http://api.mongodb.com/python/current/api/pymongo/mongo_client.html