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 に答える