Scala spark ml中的随机拆分函数每次生成不同行数的列车测试拆分

Scala spark ml中的随机拆分函数每次生成不同行数的列车测试拆分,scala,apache-spark,apache-spark-ml,Scala,Apache Spark,Apache Spark Ml,我正在尝试将数据帧拆分为train和test,其中train中有70%的行,test中有30%的行。我正在使用scala中spark.ml的randomspilt函数。我不想使用seed,因为每次运行代码时都需要不同的训练和测试集 问题是该函数在每次运行代码时都会在列车和测试中生成不同数量的行。但是,当我使用种子时,问题不会发生 这是错误还是预期行为 val Array(trainData, testData) = dfForModel.randomSplit(Array(0.7, 0.3))

我正在尝试将数据帧拆分为train和test,其中train中有70%的行,test中有30%的行。我正在使用scalaspark.ml
randomspilt
函数。我不想使用seed,因为每次运行代码时都需要不同的训练和测试集

问题是该函数在每次运行代码时都会在列车和测试中生成不同数量的行。但是,当我使用种子时,问题不会发生

这是错误还是预期行为

val Array(trainData, testData) = dfForModel.randomSplit(Array(0.7, 0.3))

Number of rows in dfForModel = 1442

Outputs:
Run number 1
Number of rows in train =  1025
Number of rows in test = 417

Run number 2
Number of rows in train =  993
Number of rows in test = 449

Run number 3
Number of rows in train =  1011
Number of rows in test = 431

Run number 4
Number of rows in train =  1003
Number of rows in test = 439

Run number 5
Number of rows in train =  989
Number of rows in test = 453


我正在使用spark scala中的count函数来计算行数,例如:
dfForModel.count

这对我来说也是如此

我不认为存在缺陷,必须对数据中的元素数不能划分为整数个元素的情况进行一些近似处理(这不是您的情况)。例如,在您的例子中,数据量具有除数7和3,但如果不是这种情况,则函数必须近似

我自己分割数据,然后保存,以便为不同的测试和测量使用相同的训练/测试数据集

问题是该函数在中生成不同数量的行 每次运行代码时进行培训和测试。然而,问题并非如此 当我使用种子时发生

这是错误还是预期行为

val Array(trainData, testData) = dfForModel.randomSplit(Array(0.7, 0.3))

Number of rows in dfForModel = 1442

Outputs:
Run number 1
Number of rows in train =  1025
Number of rows in test = 417

Run number 2
Number of rows in train =  993
Number of rows in test = 449

Run number 3
Number of rows in train =  1011
Number of rows in test = 431

Run number 4
Number of rows in train =  1003
Number of rows in test = 439

Run number 5
Number of rows in train =  989
Number of rows in test = 453

这是预期行为,而不是错误。

即使您不提供种子,它也会以随机长时间
Utils.random.nextLong
作为种子。并在内部调用函数

/**
   * Randomly splits this Dataset with the provided weights.
   *
   * @param weights weights for splits, will be normalized if they don't sum to 1.
   * @group typedrel
   * @since 2.0.0
   */
  def randomSplit(weights: Array[Double]): Array[Dataset[T]] = {
    randomSplit(weights, Utils.random.nextLong)
  }

嗨,有用吗?如果你作为所有者和