Apache spark Spark Streaming-推特分类';卡夫卡之流
我是Spark的新手,我绝对需要一些帮助来对卡夫卡流中的推特进行分类。接下来,我将解释到目前为止我所做的步骤过程以及我遇到的困难 我希望你们中的一些人能帮我解决这个问题 提前谢谢。Apache spark Spark Streaming-推特分类';卡夫卡之流,apache-spark,pyspark,spark-streaming,apache-spark-mllib,sentiment-analysis,Apache Spark,Pyspark,Spark Streaming,Apache Spark Mllib,Sentiment Analysis,我是Spark的新手,我绝对需要一些帮助来对卡夫卡流中的推特进行分类。接下来,我将解释到目前为止我所做的步骤过程以及我遇到的困难 我希望你们中的一些人能帮我解决这个问题 提前谢谢。 上下文如下所示: 我有一个简单的卡夫卡制作人,它模拟推特流(从文件中读取),还有一个推特分析器消费者,一旦收到推特,就应该在火花流上下文中对推特进行处理和分类 为了对收到的tweet进行分类,我在前面构建了TF-IDF和Naive Bayes模型,并将其存储在磁盘上,这些模型在Spark Streaming上下文启
上下文如下所示: 我有一个简单的卡夫卡制作人,它模拟推特流(从文件中读取),还有一个推特分析器消费者,一旦收到推特,就应该在火花流上下文中对推特进行处理和分类 为了对收到的tweet进行分类,我在前面构建了TF-IDF和Naive Bayes模型,并将其存储在磁盘上,这些模型在Spark Streaming上下文启动之前加载 对于处理的每条tweet(词干、标点等),我应该计算其TF-IDF向量(特征向量),并分别利用先前加载的IDF和naivebayes模型对其进行分类 直截了当地说,当我必须将tweet的术语频率向量(TF)转换为TF-IDF向量时,我的问题就出现了 代码如下: 卡夫卡制作人
text\u文件=列表(
csv.reader(
打开('/twitterDataset/twitter/test_data.txt','rU')
)
)
对于文本文件中的行:
时间。睡眠(1)
jd=json.dumps(行).encode('ascii')
制作人发送(卡夫卡主题,jd)
TweetAnalyzer
#设置配置
...
#读取配置
...
#设置卡夫卡配置
...
#创建火花上下文
sc=SparkContext(
appName=应用程序名称,
母版=火花母版
)
#创建流上下文
ssc=StreamingContext(
资深大律师,
int(火花批处理持续时间)
)
#加载TF模型并计算TF-IDF
....
kafkaParams={'metadata.broker.list':kafka_brokers}
#创建带有代理和主题的直接卡夫卡流
kvs=KafkaUtils.createDirectStream(
ssc,
[卡夫卡主题],
{“metadata.broker.list”:kafka_brokers}
)
obj1=预处理()
lines=kvs.map(λx:x[1])
tweet=lines.flatMap(obj1.TweetBuilder)
hashingTF=hashingTF()
#计算每条tweet的TF
tf_tweet=tweet.map(lambda tup:hashingTF.transform(tup[0:]))\
.map(lambda x:IDF().fit(x))
.pprint()
ssc.start()
ssc.终止协议()
在最后几行代码中,我无法在x上应用IDF().fit(x)函数,因为Spark需要“术语频率向量的RDD”,而在这一点上,由于流式Spark上下文,我有一个“传输格式的数据流”
我尝试使用transform()或foreachRDD()函数代替map(),但我不知道如何在转换后正确返回新的数据流
例如:
tf_tweet=tweet.map(lambda tup:hashingTF.transform(tup[0:]))\
.transform(分类_tweet)
.pprint()
def分类_推特(tf):
#计算推特的TF-IDF
idf=idf().fit(tf)
tf_idf=idf.transform(tf)
#打印(tf_idf.collect())
返回idf
如果我使用transform函数运行代码,Spark(在回溯的顶部)会触发以下错误:
文件
“/workspace_spark/spark-1.6.2-bin-hadoop2.6/python/lib/pyspark.zip/pyspark/streaming/util.py”,第67行,调用返回r._jrddAttributeError:'IDFModel'对象 没有属性“\u jrdd” 但是如果我省略return语句,只打印tf_idf向量,它会给出正确的输出,如下所示: [SparseVector(1048576,{164998:0.0364601:0.0924192:0.0963449: [SparseVector(1048576,{251465:0.0821055:0.0963449:0.0})]
[SparseVector(1048576,{234762:0.0280973:0.040903:0.0712732:0.0861562:0.01040690:0.0}] 如果我做对了,我想问题是当SparseVector需要数据流时,我不能返回它 不管怎样,这个问题有解决办法吗 如果有人能帮我解决这个问题,我会非常感激的,我不幸地陷入困境
谢谢返回
tf_idf
:
>>> def classify_tweet(tf):
... return IDF().fit(tf).transform(tf)
返回转换后的
tf_idf
:
>>> def classify_tweet(tf):
... return IDF().fit(tf).transform(tf)