Google Colab中PySpark使用randomSplit()出现Py4JJavaError如何解决
PySpark randomSplit 类型转换错误解决方案
错误根因
该报错是PySpark 2.1与Python3的适配问题:randomSplit方法的拆分权重参数要求传入浮点型数组,Python3不会自动将整数隐式转换为浮点数,你传入的整数列表[6, 2, 2]传递到Scala底层时出现类型不匹配,触发类型转换异常。
修复方法
两种修复方式都可直接解决问题:
- 直接将拆分比例改为浮点型,保留你要的6:2:2拆分比例
- 用列表推导式统一将整数比例转换为浮点型,适配比例动态调整的场景
修改后的参考代码如下:
# 写法1:直接使用浮点型比例 train, validation, test = movie_ratings_spark.randomSplit([6.0, 2.0, 2.0]) # 写法2:自动转换为浮点型,适合动态调整比例的场景 # split_weights = [6, 2, 2] # train, validation, test = movie_ratings_spark.randomSplit([float(w) for w in split_weights]) # 原有缓存逻辑无需修改 train.cache() validation.cache() test.cache()
环境适配补充(Colab环境可选)
如果后续还有其他PySpark版本兼容问题,可在Colab中执行以下命令升级PySpark版本,更高版本的PySpark已经修复了该参数类型适配问题:
!pip install pyspark==3.4.0
内容的提问来源于stack exchange,提问作者Steve1101
相关产品推荐
相关产品推荐

