Мой использованный код выглядит так: (просто простое соединение)
tbl(sc, 'dez') %>% inner_join(tbl(sc, 'deg'), by = c("timefrom" = "timefromdeg", "elemuid")) %>%
filter(number.x > 2500) %>% glimpse()
Содержание отдельного кадра данных не имеет значения. Само соединение будет работать. Чтобы сэкономить вычислительные мощности, я хотел бы фильтровать (или что-то еще) сразу после присоединения.
Но теперь я получаю сообщение об ошибке, что Spark не может переосмыслить переменную number.x .
Я не понимаю, потому что переменные являются частью сообщения об ошибке:
Error: org.apache.spark.sql.AnalysisException: cannot resolve '`number.x`' given input columns: [elemname.x, kind.y, timefrom, timetodeg, timeto, kind.x, elemuid, elemname.y, number.y, number.x]; line 7 pos 7;
'Project [*]
+- 'Filter ('number.x > 2500.0)
+- SubqueryAlias yoxgbdyqlw
+- Project [elemuid#7505 AS elemuid#7495, elemname#7506 AS elemname.x#7496, kind#7507 AS kind.x#7497, number#7508 AS number.x#7498, timefrom#7509 AS timefrom#7499, timeto#7510 AS timeto#7500, elemname#7512 AS elemname.y#7501, kind#7513 AS kind.y#7502, number#7514 AS number.y#7503, timetodeg#7516 AS timetodeg#7504]
+- Join Inner, ((timefrom#7509 = timefromdeg#7515) && (elemuid#7505 = elemuid#7511))
:- SubqueryAlias TBL_LEFT
: +- SubqueryAlias dez
: +- HiveTableRelation `default`.`dez`, org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, [elemuid#7505, elemname#7506, kind#7507, number#7508, timefrom#7509, timeto#7510]
+- SubqueryAlias TBL_RIGHT
+- SubqueryAlias deg
+- HiveTableRelation `default`.`deg`, org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, [elemuid#7511, elemname#7512, kind#7513, number#7514, timefromdeg#7515, timetodeg#7516]
A collect()
после присоединения не является опцией, потому что тогда у меня заканчивается память. Есть ли возможность сделать что-нибудь.
Я был бы очень рад помочь!