ВСЕГО РЕДАКТИРОВАННО
Итак, я хочу выполнить внутреннее объединение двух наборов данных.Первый (metlistafter):
+------------------------------------+-------------+---------+
| experimentid| description|intensity|
+------------------------------------+-------------+---------+
|231d4040-d486-4e8b-937a-aebe645ef8ae|Palmitic acid| 77.4946|
|231d4040-d486-4e8b-937a-aebe645ef8ae|Palmitic acid| 14.6063|
|231d4040-d486-4e8b-937a-aebe645ef8ae|Palmitic acid| 30.593|
|231d4040-d486-4e8b-937a-aebe645ef8ae|Palmitic acid| 76.2769|
+------------------------------------+-------------+---------+
, а второй (metlistbeforetemp):
+------------------------------------+-------------+---------+
| experimentid| description|intensity|
+------------------------------------+-------------+---------+
|231d4040-d486-4e8b-937a-aebe645ef8ae|1_3-butadiene| 124.379|
|231d4040-d486-4e8b-937a-aebe645ef8ae|1_3-butadiene| 175.656|
|231d4040-d486-4e8b-937a-aebe645ef8ae|1_3-butadiene| 184.736|
|231d4040-d486-4e8b-937a-aebe645ef8ae|1_3-butadiene| 58.0333|
|231d4040-d486-4e8b-937a-aebe645ef8ae|1_3-butadiene| 205.899|
+------------------------------------+-------------+---------+
что мне нужно (всего 4 строки):
+------------------------------------+-------------+---------+-------------+---------+
| experimentid| description|intensity| description|intensity|
+------------------------------------+-------------+---------+-------------+---------+
|231d4040-d486-4e8b-937a-aebe645ef8ae|Palmitic acid| 77.4946|1_3-butadiene| 124.379|
|231d4040-d486-4e8b-937a-aebe645ef8ae|Palmitic acid| 14.6063|1_3-butadiene| 175.656|
|231d4040-d486-4e8b-937a-aebe645ef8ae|Palmitic acid| 30.593|1_3-butadiene| 184.736|
|231d4040-d486-4e8b-937a-aebe645ef8ae|Palmitic acid| 76.2769|1_3-butadiene| 58.0333|
+------------------------------------+-------------+---------+-------------+---------+
Но я получаю перекрестный результат!(всего 4x5 = 20 строк):
+------------------------------------+-------------+---------+------------------------------------+-------------+---------+
| experimentid| description|intensity| experimentid| description|intensity|
+------------------------------------+-------------+---------+------------------------------------+-------------+---------+
|231d4040-d486-4e8b-937a-aebe645ef8ae|Palmitic acid| 77.4946|231d4040-d486-4e8b-937a-aebe645ef8ae|1_3-butadiene| 124.379|
|231d4040-d486-4e8b-937a-aebe645ef8ae|Palmitic acid| 77.4946|231d4040-d486-4e8b-937a-aebe645ef8ae|1_3-butadiene| 175.656|
|231d4040-d486-4e8b-937a-aebe645ef8ae|Palmitic acid| 77.4946|231d4040-d486-4e8b-937a-aebe645ef8ae|1_3-butadiene| 184.736|
|231d4040-d486-4e8b-937a-aebe645ef8ae|Palmitic acid| 77.4946|231d4040-d486-4e8b-937a-aebe645ef8ae|1_3-butadiene| 58.0333|
|231d4040-d486-4e8b-937a-aebe645ef8ae|Palmitic acid| 77.4946|231d4040-d486-4e8b-937a-aebe645ef8ae|1_3-butadiene| 205.899|
...(more rows)
Мой полный код такой:
Dataset<Row> metlistafter = sp.emptyDataFrame();
Dataset<Row> metlistinitial = sp.read().format("org.apache.spark.sql.cassandra")
.options(new HashMap<String, String>() {
{
put("keyspace", "mdb");
put("table", "experiment");
}
})
.load().select(col("experimentid"), col("description"), col("intensity")).filter(col("experimentid").isin(experimentlist.toArray())).filter(col("description").isin(metabolitelist.toArray()));
for(int iexp=0;iexp<experimentlist.size();iexp++){
for(int imet=0;imet<metabolitelist.size();imet++){
Dataset<Row> metlistbeforetemp = metlistinitial.select(col("experimentid").alias("experimentid"), col("description").alias("description"),col("intensity").alias("intensity")).filter(col("experimentid").isin(experimentlist.get(iexp))).filter(col("description").isin(metabolitelist.get(imet)));
if(imet==0){
metlistafter = metlistbeforetemp.select(col("experimentid"), col("description"),col("intensity"));
}else{
metlistafter=metlistafter.join(metlistbeforetemp,metlistafter.col("experimentid").equalTo(metlistbeforetemp.col("experimentid")),"inner");//.where(metlistafter.col("experimentid").equalTo(metlistbeforetemp.col("experimentid")));
System.out.println("result "+metlistafter.count());metlistafter.show();
}
}
}
Итак, в основном я хочу непрерывно добавлять столбцы из набора данных metlistbeforetemp вmetlistafter набор данных!То есть, если metlistbeforetemp.count () равен 25 с 3 столбцами, а metlistafter.count () - 22 с 3 столбцами, то я хочу объединить эти два и назначить результат metlistafter.Так что я бы имел metlistafter.count () = 22 с 5 столбцами!Извините за мою двусмысленность.Я действительно пытаюсь объяснить это как можно лучше!