0

我有一个如下所示的客户端 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 客户端中腌制 TextRDD 文件并将其传递给 python 服务器以取消腌制并打印接收到的数据?

4

1 回答 1

0

我认为如果不首先在 Python 中重写 scala-pickling,您将无法做到这一点。scala-pickling 是 Scala 特定的序列化库,它甚至不打算能够序列化/反序列化任意格式;它旨在用作 Java 序列化的替代品 - 用于内部目的的快速且精确的序列化。

如果您需要跨不同语言发送数据,则应考虑使用可移植协议和序列化格式,例如ProtobufCap'n'ProtoThriftMessagePack。对于他们中的大多数人来说,有多个不同语言的库,包括 Java/Scala 和 Python。

于 2015-07-14T10:08:21.307 回答