使用JAVA在Spark数据集中查找空项
使用数据创建数据集; x:y:z:t 在此数据集上执行计数后使用JAVA在Spark数据集中查找空项,java,apache-spark,dataset,Java,Apache Spark,Dataset,使用数据创建数据集; x:y:z:t 在此数据集上执行计数后 Dataset<Row> testDF = tbHitDf.groupBy("x", "y", "z", "t").count() .sort("x", "y", "z").toDF("x", "y", "z", "t", "counts"); 其中我理解了为什么缺少1、5和7的t值,因为那里没有数据。但这正是我想知道的数据,也就是说,对于哪些值x:y:z:t没有条目 我试图创建一个空数据
Dataset<Row> testDF = tbHitDf.groupBy("x", "y", "z", "t").count()
.sort("x", "y", "z").toDF("x", "y", "z", "t", "counts");
其中我理解了为什么缺少1、5和7的t值,因为那里没有数据。但这正是我想知道的数据,也就是说,对于哪些值x:y:z:t没有条目
我试图创建一个空数据集
| x| y |x| t|
+--+--+--+--+
| 1| 1| 2| 1|
| 1| 1| 2| 2|
| 1| 1| 2| 3|
| 1| 1| 2| 4|
| 1| 1| 2| 5|
| 1| 1| 2| 6|
| 1| 1| 2| 7|
然后加入他们
Dataset<Row> joinDf = emptyData.join(testDF,
testDF.col("x").equalTo(emptyData.col("x"))
.and(testDF.col("y").equalTo(emptyData.col("y")))
.and(testDF.col("z").equalTo(emptyData.col("z")))
.and(testDF.col("t").equalTo(emptyData.col("t"))));
然后使用sql语句左连接等
spSession.sql("SELECT testView.t FROM testView LEFT JOIN DataView ON DataView.x = testView.x AND DataView.y = testView.y AND DataView.z = testView.z WHERE DataView.t IS NULL")
但这也没有达到目标,因为它返回一个空列表
当我尝试使用.减去数据集时,除了我得到一个奇怪的结果,即
Dataset<Row> subDf = dataDF.except(emptyDF);
这些是常见的,我想要不常见的,所以我尝试相反的方法
Dataset<Row> subDf = emptyDF.except(dataDF);
这很让人困惑,我期待着1,5,7。。。显示。我还尝试了Dataset subDf=emptyDF.except(dataDF);但这会返回一个包含所有导线的数据集,这也让人困惑。
Dataset<Row> subDf = dataDF.except(emptyDF);
| x| y| z| t|
+--+--+--+--+
| 1| 1| 2| 2|
| 1| 1| 2| 3|
| 1| 1| 2| 4|
| 1| 1| 2| 6|
| 1| 1| 2| 8|
Dataset<Row> subDf = emptyDF.except(dataDF);
| x| y| z| t|
+--+--+--+--+
| 1| 1| 2| 1|
| 1| 1| 2| 2|
| 1| 1| 2| 3|
| 1| 1| 2| 4|
| 1| 1| 2| 5|