Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala对表使用方法_Scala_Apache Spark_Dataframe_Methods_Dataset - Fatal编程技术网

scala对表使用方法

scala对表使用方法,scala,apache-spark,dataframe,methods,dataset,Scala,Apache Spark,Dataframe,Methods,Dataset,我有一个表test,有两列a:String和b:String。我试图将一些函数应用于a中的值,例如,如果a=23且a-b假设您的数据帧为“num”,您可以将逻辑放入UDF中,并使用DataFrame的withColumn API调用您的UDF并添加新列。你可以找到这个方法的更多细节。我想这就是你需要的 val spark = SparkSession .builder() .master("local") .appName("ParquetAppendMode")

我有一个表
test
,有两列
a:String
b:String
。我试图将一些函数应用于a中的值,例如,如果a=23且a-b假设您的数据帧为“num”,您可以将逻辑放入UDF中,并使用DataFrame的withColumn API调用您的UDF并添加新列。你可以找到这个方法的更多细节。

我想这就是你需要的

val spark = SparkSession
    .builder()
    .master("local")
    .appName("ParquetAppendMode")
    .getOrCreate()

  import spark.implicits._

   val data = spark.sparkContext.parallelize(Seq(
     ("123", "125"),
     ("23", "25"),
     ("5", "9")
   )).toDF("a", "b") // create a dataframe with dummy data

  val logic = udf((a: String, b: String) => {
    if (a.toInt ==23 && (a.toInt - b.toInt) <5 ) "yes" else "no"
  })

  // add column with applying logic 
  val result = data.withColumn("newCol", logic(data("a"), data("b")))

  result.show()
val spark=SparkSession
.builder()
.master(“本地”)
.appName(“ParquetAppendMode”)
.getOrCreate()
导入spark.implicits_
val data=spark.sparkContext.parallelize(Seq(
("123", "125"),
("23", "25"),
("5", "9")
)).toDF(“a”、“b”)//使用伪数据创建数据帧
val逻辑=自定义项((a:字符串,b:字符串)=>{

如果(a.toInt==23&&(a.toInt-b.toInt)您可以使用数据集的
映射

sqlContext.table("test").as[num]
          .map(num => if(a == 23 && a-b < 5) (num, "yes") else (num, "no"))
sqlContext.table(“test”).as[num]
.map(num=>if(a==23&&a-b<5)(num,“yes”)else(num,“no”))
或者,您可以使用一个过滤器,然后选择:

sqlContext.table("test").where($"a" == 23 && ($"a"-$"b") < 5).select($"*", "yes".as("newCol"))
sqlContext.table(“test”)。其中($“a”==23&($“a”-$“b”)<5)。选择($“*”,“yes.”作为(“newCol”))

我不知道scala,但可能有类似map()的东西函数可能适用于这种情况您不需要自定义项,我们可以使用本机Spark函数。@mtoto我使用了自定义项,因为他说有更复杂的实时逻辑。
。withColumn
是转换数据集的最佳方法吗?我的意思是,如果有许多列需要附加,该怎么办?谢谢。我知道这是可以实现的th
。with column
。我只是想知道是否还有其他方法可以这样做。我有很多列要附加,并且有多个条件,所以在那里也会有很多
。另一个问题是,a、b可能是列您需要提供详细信息,因为这应该可以很好地处理这些场景。也许您正在谈论的是你需要一份案情陈述书吗?
sqlContext.table("test").where($"a" == 23 && ($"a"-$"b") < 5).select($"*", "yes".as("newCol"))