代码之家  ›  专栏  ›  技术社区  ›  kingledion

如何设置函数文本的输出类型?

  •  0
  • kingledion  · 技术社区  · 6 年前

    我正在绘制火花图 Row Array[org.apache.spark.sql.Row] 对象 spark_rows :

    val array_object = spark_rows.map( (r: Row) => {r.toSeq.head} )
    

    它的输出是一个 Array[Any] Array[String] . 我该怎么做?

    根据你定义函数的方式,我试着

    val array_object = spark_rows.map( (r: Row): String => {r.toSeq.head} )
    

    2 回复  |  直到 6 年前
        1
  •  1
  •   Leo C    6 年前

    Row 方法 toSeq 返回一个 Seq[Any] ,使用 getAs[T](index) 如下图所示:

    import org.apache.spark.sql.Row
    
    val df = Seq(
      (1, "a", 1.0),
      (2, "b", 2.0)
    ).toDF("c1", "c2", "c3")
    
    val rdd = df.rdd
    // rdd: org.apache.spark.rdd.RDD[org.apache.spark.sql.Row] = ...
    
    rdd.map(_.getAs[Int](0))
    // res1: org.apache.spark.rdd.RDD[Int]
    
    rdd.map(_.getAs[String](1))
    // res2: org.apache.spark.rdd.RDD[String]
    
    rdd.map(_.getAs[Double](2))
    // res3: org.apache.spark.rdd.RDD[Double]
    
        2
  •  1
  •   Andrey Tyukin    6 年前

    回答标题中的实际问题:使用类型归属。

    scala>  val foo = (i: Int) => Set.empty
    foo: Int => scala.collection.immutable.Set[Nothing] = $$Lambda$funnyNumber1
    

    归属:

    scala> val foo = (i: Int) => (Set.empty: Set[Int])
    foo: Int => Set[Int] = $$Lambda$funnyNumber2