【问题标题】:problem on using a map function to transform a tuple on spark scala在 spark scala 上使用 map 函数转换元组的问题
【发布时间】:2019-07-05 15:50:32
【问题描述】:

我有这个元组

val tuple_test = ("NCA-15","select count(*) from table")

我想要的是转换元组以保留第一个值NCA-15 并执行查询select count(*) from table

这就是我想要的结果

(NCA-15,8)

其中 8 是查询的结果

我试过了:

val resultat = tuple_test
    .productIterator
    .map {
       case(x: String, y: String) => (x, spark.sql(y.toString))
    }

但它会返回

resultat = non-empty iterator

【问题讨论】:

  • 请看我稍微不同的方法来获得相同的结果。
  • 有用吗?你有什么疑问吗?

标签: scala apache-spark hadoop hive jupyter


【解决方案1】:

select "NCA-15",count(*) from table 将以数据框的形式给出NCA-15,8.rddRdd[Row]Rdd[Row] 生成一个元组。

请看下面我的甜甜圈示例......因为我没有 Hive,所以我用 temptable 模拟了

  package com.examples


import org.apache.log4j.Level
import org.apache.spark.sql.{Row, SparkSession}

/**
  * Created by Ram Ghadiyaram
  */
object RDDOfTupleExample {
  org.apache.log4j.Logger.getLogger("org").setLevel(Level.ERROR)

  def main(args: Array[String]) {

    val spark = SparkSession.builder.
      master("local")
      .appName(this.getClass.getName)
      .getOrCreate()

    val donuts = Seq(("plain donut", 1.50), ("plain donut", 1.50)
      , ("vanilla donut", 2.0), ("vanilla donut", 2.0)
      , ("glazed donut", 2.50))
    val df = spark
      .createDataFrame(donuts)
      .toDF("Donut_Name", "Price")
    //lets suppose this is your hive table since i dont have hive i simulated with temp table
    df.createOrReplaceTempView("mydonuts")
    spark.sql("select \"NCA-15\" as mylabel, count(Donut_Name) as mydonutcount from mydonuts")
      .rdd.map((x: Row) => (x.get(0), x.get(1)))
      .foreach(println)
  }
}

结果:

(NCA-15,5)

【讨论】:

猜你喜欢
  • 2019-03-11
  • 2023-02-02
  • 2021-11-25
  • 2021-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-12
  • 2018-03-31
相关资源
最近更新 更多