Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.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
Group by SPARK SQL:如何通过多个colmun和使用groupBy筛选记录_Group By_Apache Spark Sql - Fatal编程技术网

Group by SPARK SQL:如何通过多个colmun和使用groupBy筛选记录

Group by SPARK SQL:如何通过多个colmun和使用groupBy筛选记录,group-by,apache-spark-sql,Group By,Apache Spark Sql,问题- 1美国在每项运动中获得了多少枚银牌?代码抛出的错误值===不是字符串的成员 //dataset michael,swimming,silve,2016,USA usha,running,silver,2014,IND lisa,javellin,gold,2014,USA michael,swimming,silver,2017,USA 2===和==之间的区别是什么 当我使用filter和select with==时,其中只有一个条件no&&或| | |,它分别显示字符串结果

问题- 1美国在每项运动中获得了多少枚银牌?代码抛出的错误值===不是字符串的成员

//dataset
 michael,swimming,silve,2016,USA
 usha,running,silver,2014,IND
 lisa,javellin,gold,2014,USA
 michael,swimming,silver,2017,USA
2===和==之间的区别是什么 当我使用filter和select with==时,其中只有一个条件no&&或| | |,它分别显示字符串结果和布尔结果,但当我使用select和filter with==时,使用以下条件会引发错误:

   val rdd = sc.textFile("/home/training/mydata/sports.txt")
val text =rdd.map(lines=>lines.split(",")).map(arrays=>arrays(0),arrays(1),arrays(2),arrays(3),arrays(4)).toDF("first_name","sports","medal_type","year","country")

text.filter(text("medal_type")==="silver" && ("country")==="USA" groupBy("year").count().show        
我只回答你的第一个问题。请注意,第一行有一个银色的打字错误

关于第二个问题:

==和===只是Scala中的一个函数

在spark===中,使用的是equalTo方法,即相等性测试

and==使用euqals方法,该方法只测试两个引用是否是同一对象。


请注意,每个函数的返回类型==equals返回布尔值,而===equalTo返回一列结果。

感谢@ykout的回复。但第二个问题还不清楚。请容忍我,因为我是一个新手,也试图从资源中理解。关于返回类型,df.select$_c1==INDIA返回布尔值,而df.filter$_c1==INDIA返回各自的列。事实上,select和filter都返回数据集并将列作为参数,这就是为什么使用==时失败的原因,但select执行的操作与以给定列作为参数的过滤器不同。筛选器返回与给定列中的条件匹配的完整行,而select为所选列返回布尔类型的条件结果列的一列。这就像在.select.的文本中说spark.sqlselect country=='IND'。。和spark.sqlselect*from country,其中country='IND'代表.filter。。将文本注册为临时视图后。
text.filter(text("medal_type")==="silver" && text("country")==="USA").groupBy("year").count().show

+----+-----+
|year|count|
+----+-----+
|2017|    1|
+----+-----+
   // Scala:
   df.filter( df("colA") === df("colB") )

   // Java
   import static org.apache.spark.sql.functions.*;
   df.filter( col("colA").equalTo(col("colB")) );