我有以下DataFrame
+----+----+----+----+
|col1|col2|col3|col4|
+----+----+----+----+
| A| 6|null|null|
| B|null| 5|null|
| C|null|null| 7|
| B|null|null| 4|
| B|null| 2|null|
| B|null| 1|null|
| A| 4|null|null|
+----+----+----+----+
我想在Spark中做的是返回col1
中的所有条目,如果它具有col2
,col3
或{{1}列之一的最大值}}
这段代码不能做我想要的事情:
col4
这个只给出了一列(1)的最大值:
df.groupBy("col1").max("col2","col3","col4").show()
我甚至尝试合并单个输出:
df.groupBy("col1").max("col2").show()
其中//merge rows
val rows = test1.rdd.zip(test2.rdd).map{
case (rowLeft, rowRight) => Row.fromSeq(rowLeft.toSeq ++ rowRight.toSeq)}
//merge schemas
val schema = StructType(test1.schema.fields ++ test2.schema.fields)
// create new df
val test3: DataFrame = sqlContext.createDataFrame(rows, schema)
和test1
test2
已完成查询(1)。
那我怎么能很好地实现这个呢?
DataFrames
甚至只有不同的值:
+----+----+----+----+
|col1|col2|col3|col4|
+----+----+----+----+
| A| 6|null|null|
| B|null| 5|null|
| C|null|null| 7|
+----+----+----+----+
提前致谢!最好
答案 0 :(得分:2)
您可以使用以下内容: -
sqlcontext.sql("select x.* from table_name x ,
(select max(col2) as a,max(col3) as b, max(col4) as c from table_name ) temp
where a=x.col2 or b= x.col3 or c=x.col4")
会给出理想的结果。
答案 1 :(得分:1)
可以这样解决:
df.registerTempTable("temp")
spark.sql("SELECT max(col2) AS max2, max(col3) AS max3, max(col4) AS max4 FROM temp").registerTempTable("max_temp")
spark.sql("SELECT col1 FROM temp, max_temp WHERE col2 = max2 OR col3 = max3 OR col4 = max4").show