繁体   English   中英

适用于Spark数据集的Java调用n采样器

[英]Java-callable n-Sampler for Spark Dataset

我正在将代码从Python迁移到Java,并希望为Dataset<Row>构建n-Sampler。 这有点令人沮丧,我最终作弊,并根据其他帖子对其进行了非常低效的Scala功能。 然后,我从Java代码运行该函数,但即使这样也没有用

N样本行为:
-从数据集中随机选择N行
-无重复(无替换)

当前解决方案(断)

import scala.util.Random

object ScalaFunctions {
  def nSample(df : org.apache.spark.sql.Dataset[org.apache.spark.sql.Row], n : Int) : org.apache.spark.sql.Dataset[org.apache.spark.sql.Row] = {
    //inefficient! Shuffles entire dataframe
    val output = Random.shuffle(df).take(n)
    return output.asInstanceOf[org.apache.spark.sql.Dataset[org.apache.spark.sql.Row]]
  }
}

错误信息

Error:(6, 25) inferred type arguments [org.apache.spark.sql.Row,org.apache.spark.sql.Dataset] do not conform to method shuffle's type parameter bounds [T,CC[X] <: TraversableOnce[X]]
    val output = Random.shuffle(df).take(n)
Error:(6, 33) type mismatch;
 found   : org.apache.spark.sql.Dataset[org.apache.spark.sql.Row]
 required: CC[T]
    val output = Random.shuffle(df).take(n)

我是Java和Scala的新手,所以即使我了解shuffle函数似乎并不喜欢Datasets,也不知道如何解决它。
-虚拟啤酒,如果您的解决方案不涉及对一小部分n样本(250)进行改组整个数据帧(对我来说,这可能像4M行)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM