我有一个像下面这样的客户端scala代码
import java.net._
import java.io._
import scala.io._
import scala.pickling._
import scala.pickling.json._
val sk = new Socket(InetAddress.getByName("localhost"), 13373)
val output = new PrintStream(sk.getOutputStream())
val textRDD = sc.textFile("some file");
output.println( #pickle the textRDD and pass it to server)
output.flush()
sk.close()
和python server.py,如下所示
import SocketServer
import json
import pickle
class MyTCPServer(SocketServer.ThreadingTCPServer):
allow_reuse_address = True
class MyTCPServerHandler(SocketServer.BaseRequestHandler):
def handle(self):
try:
data = self.request.recv(1024)
#unpickle the data received here and print it.
print data
except Exception, e:
print "Exception wile receiving message: ", e
server = MyTCPServer(('127.0.0.1', 13373), MyTCPServerHandler)
server.serve_forever()
如何在scala客户端pickle texttrdd文件并将其传递给python服务器以解pickle并打印接收到的数据?
我认为如果不先在Python中重写scala-pickling,您将无法做到这一点。scala-pickling是scala特有的序列化库,它甚至不打算序列化/反序列化任意格式;它被设计成Java序列化的替代品——用于内部目的的快速和精确的序列化。
如果你需要跨不同的语言发送数据,你应该考虑使用可移植协议和序列化格式,例如,Protobuf, Cap'n'Proto, Thrift或MessagePack。对于它们中的大多数来说,有不同语言的多个库,包括Java/Scala和Python。