【问题标题】:Extracting value of columns in spark dataframe提取火花数据框中列的值
【发布时间】:2018-03-14 18:18:27
【问题描述】:

我有一个要求,我需要从 spark 数据框中过滤掉某个列的值(比如“价格”)需要与 scala 映射中存在的值匹配的行。scala 映射的键是值另一列(比如“id”)。 我的数据框包含两列:id 和 price。 我需要过滤掉所有价格与scala map中提到的价格不匹配的列。

我的代码是这样的:

object obj1{
  // This method returns value price for items as per their id
  getPrice(id:String):String {
   //lookup in a map and return the price
  }
}

object Main{    
  val validIds = Seq[String]("1","2","3","4")
  val filteredDf = baseDataframe.where(baseDataframe("id").in(validIDs.map(lit(_)): _*) &&
    baseDataframe("price") === (obj1.getPrice(baseDataframe("id").toString()))) 

  // But this line send string "id" to obj1.getPrice() function
  // rather than value of id column
  }
}

我无法将 id 列的值传递给函数 obj1.getPrice()。 有什么建议可以实现吗?

谢谢,

【问题讨论】:

    标签: scala apache-spark apache-spark-sql spark-dataframe spark-streaming


    【解决方案1】:

    您可以编写一个 udf 来执行此操作:

    val checkPrice(id: String, price: String) = validIds.exists(_ == id) && obj1.getPrice(id) == price
    val checkPriceUdf = udf(checkPrice)
    
    baseDataFrame.where(checkPriceUdf($"id", $"price"))
    

    或者另一种解决方案是将 id -> priceMap 转换为数据框,然后在idprice 列上使用baseDataFrame 进行内部连接。

    【讨论】:

      猜你喜欢
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      • 2017-02-15
      • 1970-01-01
      • 2020-06-21
      • 2019-03-19
      • 2018-06-07
      • 2022-08-05
      相关资源
      最近更新 更多