首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“RDD”对象没有属性“_jdf”pyspark RDD

“RDD”对象没有属性“_jdf”pyspark RDD
EN

Stack Overflow用户
提问于 2018-02-26 22:00:59
回答 1查看 14.5K关注 0票数 2

我是新来的。我想对一个文本文件执行一些机器学习。

代码语言:javascript
复制
from pyspark import Row
from pyspark.context import SparkContext
from pyspark.sql.session import SparkSession
from pyspark import SparkConf
sc = SparkContext
spark = SparkSession.builder.appName("ML").getOrCreate()

train_data = spark.read.text("20ng-train-all-terms.txt")
td= train_data.rdd #transformer df to rdd
tr_data= td.map(lambda line: line.split()).map(lambda words: Row(label=words[0],words=words[1:]))
from pyspark.ml.feature import CountVectorizer

vectorizer = CountVectorizer(inputCol ="words", outputCol="bag_of_words")
vectorizer_transformer = vectorizer.fit(td)

对于我的最后一个命令,我得到了错误"AttributeError:'RDD‘对象没有属性'_jdf’

enter image description here

有人能帮帮我吗?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-27 00:25:07

您不应该在CountVectorizer中使用rdd。相反,您应该尝试在dataframe中形成单词数组,如下所示

代码语言:javascript
复制
train_data = spark.read.text("20ng-train-all-terms.txt")

from pyspark.sql import functions as F
td= train_data.select(F.split("value", " ").alias("words")).select(F.col("words")[0].alias("label"), F.col("words"))

from pyspark.ml.feature import CountVectorizer
vectorizer = CountVectorizer(inputCol="words", outputCol="bag_of_words")
vectorizer_transformer = vectorizer.fit(td)

然后它应该可以工作,这样您就可以像这样调用transform函数

代码语言:javascript
复制
vectorizer_transformer.transform(td).show(truncate=False)

现在,如果您想坚持转换为rdd样式的旧样式,那么您必须修改某些代码行。以下是修改后的完整代码(工作中)

代码语言:javascript
复制
from pyspark import Row
from pyspark.context import SparkContext
from pyspark.sql.session import SparkSession
from pyspark import SparkConf
sc = SparkContext
spark = SparkSession.builder.appName("ML").getOrCreate()

train_data = spark.read.text("20ng-train-all-terms.txt")
td= train_data.rdd #transformer df to rdd
tr_data= td.map(lambda line: line[0].split(" ")).map(lambda words: Row(label=words[0], words=words[1:])).toDF()
from pyspark.ml.feature import CountVectorizer

vectorizer = CountVectorizer(inputCol="words", outputCol="bag_of_words")
vectorizer_transformer = vectorizer.fit(tr_data)

但我建议你坚持使用dataframe way。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48990291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档