在Python(Jupyter Notebook)中与kafka生产者发送数据时出现问题

时间:2019-03-19 19:05:27

标签: python apache-spark apache-kafka kafka-producer-api

我正在尝试使用Kafka,Python和Twitter创建大数据分析。我有一条tweet数据流,我只使用它们的主题标签。我的问题与制作人Kafka在Python中使用有关。我无法将所需的数据发送到创建的主题中,因为我看不到任何与生产者一起发送变量内容的选项。

https://kafka-python.readthedocs.io/en/master/usage.html中,我只能看到使用b'some_string'发送精确字符串的选项。但是我想发送我从Twitter流中获取的主题标签。我对Python不太了解,因此如果解决方案显而易见,请原谅。

进口:

from pyspark import SparkContext
from pyspark.streaming import StreamingContext
from pyspark.streaming.kafka import KafkaUtils
import json
import tweepy
from tweepy import OAuthHandler
from tweepy import Stream
import kafka
from kafka import SimpleProducer, KafkaClient
from kafka import KafkaProducer

流上下文:

ssc = StreamingContext(sc,60)

键:

consumer_key="consumer_key"
consumer_secret="consumer_secret"
access_token="access_token"
access_token_secret="access_token_secret"

Tweepy:

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

制作人:

producer = KafkaProducer(bootstrap_servers=['localhost:9092'])

代码:

class MyStreamListener(tweepy.StreamListener):

    def on_status(self, status):
        for hashtag in status.entities['hashtags']:
            prueba = b'hashtag["text"]'
            producer.send('topic', prueba)
            return True
    def on_error(self, status_code):
        if status_code == 420:
            #returning False in on_data disconnects the stream
            return False

StreamListener:

myStreamListener = MyStreamListener()
myStream = tweepy.Stream(auth = api.auth, listener=MyStreamListener())

推文流:

myStream.filter(track=['some_text'])

问题是,生产者仅发送prueba的文字字符串,即"(hashtag["text"])"。我想发送的不是确切的东西,而是内容。

谢谢。

1 个答案:

答案 0 :(得分:0)

producer.send('topic', hashtag)怎么样?您还需要确保将数据编码为原始字节,这是kafka存储的内容。如果hashtag是一个简单的字符串,则可以执行producer.send('topic', hashtag.encode('utf-8'))。如果是字典或更复杂的数据结构,则可能需要在编码为字节之前使用json.dumps。希望这会有所帮助!