gpt4 book ai didi

python - PySpark - 在 Dataframe 上使用 randomSplit 时出错

转载 作者:行者123 更新时间:2023-11-28 18:10:09 26 4
gpt4 key购买 nike

我用我的数据创建了一个 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 向量(使用 pyspark 的 OneHotEncoding() 函数创建)。

当 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 Vectors,它会出于某种原因开始工作。 (例如,我删除了“aVec”,它起作用了)。问题似乎与特定列无关,因为我可以删除它们中的任何一个(如果我使用 Features = ['aVec', 'bVec', 'cVec'] 或 Features = ['bVec', 'cVec ', 'dVec'] 它会起作用,但不适用于 Features = ['aVec', 'bVec', 'cVec', 'dVec']).

我收到这个错误有什么原因吗?

最佳答案

我有同样的问题,通过从我的数据中删除空白值解决了我的问题。我在其中一个输入列中有几个空白值,它们不是 NA 或 NULL,而只是一个空格:“”。这导致了您在上面描述的相同错误。我使用 raw_data = raw_data.filter('YourColumn != ""') 过滤掉了它们。

希望这对你也有帮助。

关于python - PySpark - 在 Dataframe 上使用 randomSplit 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51178469/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com