#scala #apache-spark #apache-spark-sql
#scala #apache-spark #apache-spark-sql
Вопрос:
Я пытаюсь выполнить объединение между двумя таблицами с разным количеством столбцов.
образцы данных
Movieid | возможности | вероятность |
---|---|---|
2 | 0.37986 | 0.50231 |
4 | 0.83521 | 0.2925 |
6 | 0.9925 | 0.7062 |
8 | 0.327 | 0.764 |
Movieid | Название | жанры |
---|---|---|
1 | История игрушек (1995) | Приключения, анимация, дети |
2 | Джуманджи (1995) | Дочерние элементы |
3 | Ожидание выдоха (1995) | комедия, драма, романтика |
4 | Отец невесты, часть II (1995) | Юмор |
5 | Сабрина (1995) | Романтика, комедия |
корень:
Файл1
|-- MovieIdId: integer (nullable = false)
|-- features: Double (nullable = false)
|-- probability: Double (nullable = false)
Файл2
|--MovieId: integer (nullable = false)
|--title: String (nullable = false)
|-- genres: String (nullable = false)
код:`
`val Data = sc.textFile("file:///usr/local/File1").map(_.split(",")).map(p => DataClass(p(0).trim.toInt, p(1).trim, p(2).trim)).toDF()
Data.registerTempTable("Genres")
val Data2 = sc.textFile("file:///usr/local/File2").map(_.split(",")).map(p =>Movie(p(0).trim.toInt, p(1).trim, p(1).trim)).toDF()
Data.registerTempTable("Tags")
val df=sqlContext.sql("SELECT MovieId, title, genres FROM Genres UNION ALL SELECT MovieId, features, probability FROM Tags")
Обновить:
Я хочу создать таблицу, содержащую MovieID, функции, вероятность, жанры.
Как объединить два столбца из двух таблиц без дублирования?
Комментарии:
1. вы уверены, что хотите объединить все, а не объединение?
2. извините, я новичок в spark. Я пробую только unionAll.
3. можете ли вы добавить свой входной фрейм данных и желаемый результат?
4. Я обновляю свой вопрос с помощью ввода.
5. я хотел, чтобы вводились ДАННЫЕ exemple и выводились ДАННЫЕ exemple, а не схема.
Ответ №1:
Я думаю, вам нужно полное внешнее объединение, а не объединение:
val df = Data.join(Data2, Seq("Movieid"), "full")
df.show
// ------- -------- ----------- ---------------------------------- ----------------------------
//|Movieid|features|probability|title |genres |
// ------- -------- ----------- ---------------------------------- ----------------------------
//|1 |null |null |Toy Story (1995) |Adventure,Animation,children|
//|6 |0.9925 |0.7062 |null |null |
//|3 |null |null |Waiting to Exhale (1995) |comedy,Drama,Romance |
//|5 |null |null |Sabrina (1995) |Romance,comedy |
//|4 |0.83521 |0.2925 |Father of the Bride Part II (1995)|comedy |
//|8 |0.327 |0.764 |null |null |
//|2 |0.37986 |0.50231 |Jumanji (1995) |Children |
// ------- -------- ----------- ---------------------------------- ----------------------------
Или с использованием SQL:
val df = spark.sql("""
select *
from Genres g
full outer join Tags t
on g.Movieid = t.Movieid
""")