#java #apache-spark #join
#java #apache-spark #Присоединиться
Вопрос:
У меня есть следующие фреймы данных :
Dataframe1
---------------
|id_data |
---------------
|[1,20,3] |
|[5,40] |
|[50,90] |
|[30,70] |
---------------
Тип id_data : array<integer>
Dataframe2
---------------
|id_data2 |
---------------
|20 |
|90 |
|100 |
---------------
Я хочу следующий вывод :
---------------
|id_data2 |
---------------
|20 |
|90 |
---------------
Я сделал это с помощью join
Dataset <Row> result = Dataframe2.as("data1").join( Dataframe1.as("data2"),expr("array_contains(data2.id_data,data1.id_data2)"));
У меня большой объем данных, и это очень тяжело с точки зрения производительности.
Есть ли какая-либо возможность сделать это без join function
использования Spark с языком Java?
Мне нужна ваша помощь.
Комментарии:
1. объединение необходимо, но вы можете
explode
выполнить первое.2. Я провел некоторое исследование и обнаружил, что могу считывать значения Dataframe 1 как строковые переменные.
3. вот так :
for(Iterator<Row> iter = dataframee.toLocalIterator(); iter.hasNext();) { String item = (iter.next()).get(0).toString(); }
и делать это :select *from Dataframe2 where id_data2 = item
Ответ №1:
Вы можете использовать explode
функцию. Это код Scala.
df1.withColumn("id_data1", explode($"id_data"))
.join(df2, $"id_data1" === $"id_data2", "inner")
.select("id_data1")
.show
--------
|id_data1|
--------
| 20|
| 90|
--------