首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将数据行传递给scala中的函数

如何将数据行传递给scala中的函数
EN

Stack Overflow用户
提问于 2022-02-10 04:37:37
回答 1查看 464关注 0票数 0

我想把数据的每一行的输入和retun输出作为一个映射。

代码语言:javascript
运行
复制
def getV(str:String,colValues:Map[String,Any]):Any={
    var s= colValues.get("str") match {
      case Some(value) =>value
      case None =>None
    }
    return s
  }
  def setV(key:String,value:String,colValues:scala.collection.mutable.Map[String,Any]):Unit={
    colValues(key)=value
  }

def returnNotEmptyCols_map(inputRow: Row): collection.mutable.Map[String,Any] = {
    implicit val formats = Serialization.formats(NoTypeHints)
    var colValues = inputRow.getValuesMap[Any](inputRow.schema.fieldNames)
    var mutMap = collection.mutable.Map(colValues.toSeq: _*)
    //Write my operations here------
    //print(getV("number",colValues))
    //setV("hey","there",mutMap)
   
    mutMap
    //return df

  }

然而,我面临的问题是,我使用udf从dataframe调用这个函数,因此结果输出是列格式的。

代码语言:javascript
运行
复制
spark.udf.register("myFilterFunction", returnNotEmptyCols _)
    import spark.implicits._
    val df = Seq(
      (12, "bat"),
      (13, "mouse"),
      (14, "horse")
    ).toDF("number", "word")
    var dr=df.rdd.collect
    val newDF=df.withColumn("newcl",callUDF("myFilterFunction",struct(df.columns.map(df(_)) : _*)))

有什么方法可以将行作为输入传递给methood returnNotEmptyCols_map函数,并将oupput作为映射(而不是数据格式的列)。我们可以使用下面的链接function to each row of Spark Dataframe来实现这一点

但它也是一个udf,结果输出为列格式。

EN

回答 1

Stack Overflow用户

发布于 2022-02-10 08:02:09

UDF的目的是继续使用DataFrame。如果不需要DataFrame,可以使用函数作为参数在底层的rdd上运行映射,并获得函数返回类型的rdd。

val rdd = df.rdd.map(returnNotEmptyCols_map)

它不适用于Dataset.map,因为Any

然后你可以做rdd.collect什么的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71059890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档