gpt4 book ai didi

scala - 如何使用 Apache Spark Scala 获取大型 CSV/RDD[Array[double]] 中所有列的直方图?

转载 作者:行者123 更新时间:2023-12-04 08:05:44 26 4
gpt4 key购买 nike

我正在尝试使用 Spark Scala 计算 CSV 文件中所有列的直方图。

我发现 DoubleRDDFunctions 支持直方图。
所以我编码如下以获得所有列的直方图。

  • 获取列数
  • 创建 RDD[double]每列并计算每个 RDD 的直方图使用 DoubleRDDFunctions
    var columnIndexArray = Array.tabulate(rdd.first().length) (_ * 1)

    val histogramData = columnIndexArray.map(columns => {
    rdd.map(lines => lines(columns)).histogram(6)
    })

  • 这是一个好方法吗?
    谁能建议一些更好的方法来解决这个问题?

    提前致谢。

    最佳答案

    不是更好,但替代方法是将 RDD 转换为 DataFrame 并使用 histogram_numeric UDF。

    示例数据:

    import scala.util.Random
    import org.apache.spark.sql.types._
    import org.apache.spark.sql.functions.{callUDF, lit, col}
    import org.apache.spark.sql.Row
    import org.apache.spark.sql.hive.HiveContext

    val sqlContext = new HiveContext(sc)

    Random.setSeed(1)

    val ncol = 5

    val rdd = sc.parallelize((1 to 1000).map(
    _ => Row.fromSeq(Array.fill(ncol)(Random.nextDouble))
    ))

    val schema = StructType(
    (1 to ncol).map(i => StructField(s"x$i", DoubleType, false)))

    val df = sqlContext.createDataFrame(rdd, schema)
    df.registerTempTable("df")

    询问:
    val nBuckets = 3
    val columns = df.columns.map(
    c => callUDF("histogram_numeric", col(c), lit(nBuckets)).alias(c))
    val histograms = df.select(columns: _*)

    histograms.printSchema

    // root
    // |-- x1: array (nullable = true)
    // | |-- element: struct (containsNull = true)
    // | | |-- x: double (nullable = true)
    // | | |-- y: double (nullable = true)
    // |-- x2: array (nullable = true)
    // | |-- element: struct (containsNull = true)
    // | | |-- x: double (nullable = true)
    // | | |-- y: double (nullable = true)
    // |-- x3: array (nullable = true)
    // | |-- element: struct (containsNull = true)
    // | | |-- x: double (nullable = true)
    // | | |-- y: double (nullable = true)
    // |-- x4: array (nullable = true)
    // | |-- element: struct (containsNull = true)
    // | | |-- x: double (nullable = true)
    // | | |-- y: double (nullable = true)
    // |-- x5: array (nullable = true)
    // | |-- element: struct (containsNull = true)
    // | | |-- x: double (nullable = true)
    // | | |-- y: double (nullable = true)

    histograms.select($"x1").collect()

    // Array([WrappedArray([0.16874313309969038,334.0],
    // [0.513382068667877,345.0], [0.8421388886903808,321.0])])

    关于scala - 如何使用 Apache Spark Scala 获取大型 CSV/RDD[Array[double]] 中所有列的直方图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33251427/

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