ValueError: длина объекта (1) не соответствует длине полей (2)

Я запускаю скрипт Python на Spark, но получаю следующую ошибку: ValueError: длина объекта (1) не соответствует длине полей (2). Я перечислю код, который я запускаю, и скриншот ошибки:

conf = SparkConf().setMaster("local").setAppName("ApplySentimentModel")
sc = SparkContext(conf = conf)
spark = SparkSession(sc)

# read the sentiment tsv file into an rdd and split it based upon tab
# the test file should be in the following format
# label->tab->tweet
lines = sc.textFile("test_file.tsv").map(lambda x: x.split("\t"))
# define the schema
schema = StructType([StructField("target", StringType(), True), StructField("tweet", StringType(), True)])
# create dataframe from rdd
docs = spark.createDataFrame(lines, schema)

# define the processing pipeline (tokenize->tf->idf->label_indexer)
tokenizer = Tokenizer(inputCol = "tweet", outputCol = "words")
hashtf = HashingTF(inputCol = "words", outputCol='tf')
idf = IDF(inputCol='tf', outputCol = "features", minDocFreq=5)
indexedLabel = StringIndexer(inputCol = "target", outputCol = "label")
pipeline = Pipeline(stages=[tokenizer, hashtf, idf, indexedLabel])

# apply the pipeline to the testing datasets
pipelineFit = pipeline.fit(docs)
test_df = pipelineFit.transform(docs)

# load the trained model
lrModel = LogisticRegressionModel.load('lrModel.model')
# apply the model to predict the sentiment
predictions = lrModel.transform(test_df)

# compute the accuracy of predictions
accuracy = predictions.filter(predictions.label == predictions.prediction).count() / float(docs.count())
print("****************************************\n")
print("Prediction accuracy " + str(accuracy) + "\n")
print("****************************************\n")

# save the testing data, and the the target and predicted labels (0 -> positive, 1 -> negative)
predictions.select("tweet", "label", "prediction").write.format('csv').option('header',True).mode('overwrite').option('sep',',').save('predictions')

sc.stop()

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
12 070
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это означает, что ваш lines RDD содержит только 1 столбец, но вы запросили создание фрейма данных с 2 столбцами из rdd. Убедитесь, что ваш файл содержит два столбца, разделенных табуляцией в каждой строке. Если в некоторых строках отсутствуют записи, вы увидите описанную вами ошибку.

На самом деле, если вы хотите создать фрейм данных из файла tsv, вам лучше использовать

schema = StructType([
    StructField("target", StringType(), True),
    StructField("tweet", StringType(), True)
])

docs = spark.read.csv('test_file.tsv', sep='\t', schema=schema)

который позаботится об отсутствующих записях с NULL.

Другие вопросы по теме