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"))