Как засолить в Клиенте и Разбить в Сервере?

У меня есть клиентский скала код, как показано ниже

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()

Как выбрать файл TextRDD в клиенте Scala и передать его на сервер Python, чтобы распаковать его и распечатать полученные данные?

1 ответ

Я не думаю, что вы сможете сделать это, не переписав сначала scala-pickling на Python. scala-pickling - это специфичная для Scala библиотека сериализации, она даже не предназначена для возможности сериализации / десериализации произвольных форматов; он предназначен для использования в качестве замены для сериализации Java - быстрой и точной сериализации для внутренних целей.

Если вам нужно отправить данные на разных языках, вам следует рассмотреть возможность использования переносимых протоколов и форматов сериализации, например, Protobuf, Cap'n'Proto, Thrift или MessagePack. Для большинства из них существует несколько библиотек на разных языках, включая Java/Scala и Python.

Другие вопросы по тегам