Я создал DataFrame со своими данными для проведения экспериментов по машинному обучению. Я пытаюсь разделить его на обучающие и тестовые наборы с помощью функции randomSplit (), но это дает мне некоторые исключения, которые я не могу выяснить причину. Мой код похож на это:
Features = ['A', 'B', 'C', 'D', 'E', 'aVec', 'bVec', 'cVec', 'dVec']
vec = VectorAssembler(inputCols = Features, outputCol = 'features')
df = vec.transform(df)
df = df.select("features", "Target")
(train, test) = df.randomSplit([0.8, 0.2])
print(df.count())
print(train.count())
print(test.count())
Буквы внутри 'Features' представляют числовые объекты, а элементы * Vec представляют векторы OneHotEncoding (созданные с помощью функции OneHotEncoding () pyspark).
Когда Spark достигает print (train.count ()), запускается следующее исключение:
Py4JJavaError: An error occurred while calling o2274.count.
: org.apache.spark.SparkException: Job aborted due to stage failure:
Task 5 in stage 1521.0 failed 1 times, most recent failure: Lost task
5.0 in stage 1521.0 (TID 122477, localhost, executor driver):
java.lang.IllegalAccessError: tried to access field
org.apache.spark.sql.execution.BufferedRowIterator.partitionIndex from
class
Печать на df работает хорошо, поэтому я думаю, что randomSplit как-то портит мои данные.
Я провел небольшой тест, и если я удаляю один из Векторов OneHotEncoding, он начинает работать по какой-то причине. (Например, я удалил «aVec», и это сработало). Кажется, проблема не в конкретном столбце, потому что я мог удалить любой из них (если бы я запускал свой код с помощью Features = ['aVec', 'bVec', 'cVec'] или Features = ['bVec', 'cVec ',' dVec '] это будет работать, но не с Features = [' aVec ',' bVec ',' cVec ',' dVec ']).
Есть ли причина этой ошибки, которую я получаю?