错误:AttributeError:'DataFrame'对象没有属性'_jdf'

27
我想使用pyspark进行k折交叉验证以微调参数,我正在使用pyspark.ml。但是出现AttributeError错误。
AttributeError: 'DataFrame' object has no attribute '_jdf'
我曾尝试使用pyspark.mllib,但未能成功执行k-折交叉验证。
import pandas as pd
from pyspark import SparkConf, SparkContext
from pyspark.ml.classification import DecisionTreeClassifier

data=pd.read_csv("file:///SparkCourse/wdbc.csv", header=None)
type(data)
print(data)

conf = SparkConf().setMaster("local").setAppName("SparkDecisionTree")
sc = SparkContext(conf = conf)

# Create initial Decision Tree Model
dt = DecisionTreeClassifier(labelCol="label", featuresCol="features", 
maxDepth=3)

# Train model with Training Data
dtModel = dt.fit(data)

# I expect the model to be trained but I'm getting the following error 
AttributeError: 'DataFrame' object has no attribute '_jdf'

注意: 我能够打印数据。错误在dtModel中。


8
您需要将pandas数据框转换为spark数据框。 - sramalingam24
我会尝试做到的。谢谢。 - nvsk. avinash
如果有帮助的话,这个错误也可能是由于在加载后将DataFrame转换为pandas进行显示而引发的。例如,通过使用df.limit(5).toPandas() - Jakob
3个回答

18

将 Pandas 转换为 Spark

from pyspark.sql import SQLContext
sc = SparkContext.getOrCreate()
sqlContext = SQLContext(sc)

spark_dff = sqlContext.createDataFrame(panada_df)

0

我认为这是因为你需要使用:spark.read,请尝试以下代码:

data = spark.read.option("header", True).csv(
 "file:///SparkCourse/wdbc.csv"
)

0

如果出现度量评估错误,您可能需要执行以下操作:

  1. 正确地使用Spark对测试集进行转换,然后使用Pandas DF进行查看。
# Spark model, transformed test, converted to pandas df
predictions = model.transform(test)
predDF = predictions.toPandas()
predDF.head()
  1. 然后尝试:
eval_acc = MulticlassClassificationEvaluator(
            labelCol='Label_index',
            predictionCol='prediction',
            metricName='accuracy'
)

# Evaluate Performance
acc = eval_acc.evaluate(predDF) # Error
print(f"accuracy: {acc}")

我忘记了 predDF 是一个 Pandas DataFrame。 需要 predictions 因为它是一个 Spark Dataframe。

acc = eval_acc.evaluate(predictions) # Works
print(f"accuracy: {acc}")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接