Не удалось отправить поток на искру - PullRequest
0 голосов
/ 19 мая 2018

На стороне сервера я настроил простой tcp-сервер, например:

import socket
from time import sleep
host = 'localhost'
port = 9999
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
s.listen(1)
print('\nListening for a client at',host , port)
conn, addr = s.accept()
print('\nConnected by', addr)
try:
    while True:
          with open('FireData-Part2.csv') as f:
                    header = next(f) # read from second line in csv file 
                    for line in f: 
                        out = "linesdaadsa".encode('utf-8') #  !!!IT DOES NOT WORK HERE  !!
                        #out = line.encode('utf-8') #  !!IT WORKS HERE !!!!!!!
                        self.conn.send(out)
                        print('Sending line',line)
                        sleep(0.2)  # ensure every 1 second 5 of firedata is generated 
                    print('End Of Stream fire.')
except socket.error:
    print ('Error Occured.\n\nClient disconnected.\n')

на стороне клиента. Я написал что-то простое:

import sys
import pymongo
from pymongo import MongoClient
from pprint import pprint
from pyspark import SparkContext
from pyspark.streaming import StreamingContext   


sc = SparkContext.getOrCreate()

if (sc is None):
    sc = SparkContext(appName="MongoDBApp")
ssc = StreamingContext(sc, 5)

host = "localhost"
port = 12345

lines = ssc.socketTextStream(host, int(port))

lines.pprint()

ssc.start()

try:
    #deliberately cancel the execution after one minute
    ssc.awaitTermination(timeout=60)
except KeyboardInterrupt:
    ssc.stop()
    sc.stop()

ssc.stop()
sc.stop()

, однако ничего не будетраспечатай, я понимаю, что я пытаюсь отправить простую строку, такую ​​как 'line', клиенту.и если я закодирую строку, она распечатается!Это слишком странно для меня, потому что они оба имеют одинаковую строку типа, почему нельзя просто закодировать строку и отправить ее клиенту ??

1 Ответ

0 голосов
/ 21 мая 2018

Этот вопрос очень похож на последний вопрос, который я задаю, и решение остается тем же, я добавил «\ n» к строковым данным перед отправкой.в основном это выглядит так:

out = "linesdaadsa\n".encode('utf-8')

или out = (lines+"\n").encode('utf-8)
Я понятия не имею, почему это так, я думаю, что это проблема с искрой.но это так раздражает таких людей, как я новичок, может ли кто-нибудь дать какое-либо представление, почему это так?Спасибо!

...