您可以使用 SQL 和DBI
库来完成。
假设您在 Spark 中复制了 data.frame。(请注意,您的colnames
函数调用中有错字,您已将第一列的名称设置为“co1”,而不是“col1”)。
copy_to(sc, df)
现在,您可以使用以下命令创建一个包含所需列的新 Spark 表:
DBI::dbSendQuery(sc, "CREATE TABLE new_df AS
SELECT CONCAT(t1.col1, t1.col2) AS newcol, t1.col1, t1.col2, t2.col4, t2.col5
FROM df t1
LATERAL VIEW EXPLODE (map('A', A, 'B', B, 'C', C, 'D', D, 'E', E, 'F', F, 'G', G,
'H', H, 'I', I, 'J', J, 'K', K, 'L', L, 'M', M, 'N', N, 'O', O, 'P', P, 'Q', Q,
'R', R, 'S', S, 'T', T, 'U', U, 'V', V, 'W', W, 'X', X, 'Y', Y, 'Z', Z)) t2 as col4, col5 ORDER BY col4 DESC")
现在,您可以获得对这个新 Spark 表的引用并在 Sparklyr 中使用它:
ref_new_df <- tbl(sc, "new_df")
我希望这有帮助。
编辑以显示结果
> copy_to(sc, df)
> DBI::dbSendQuery(sc, "CREATE TABLE new_df AS
+ SELECT CONCAT(t1.col1, t1.col2) AS newcol, t1.col1, t1.col2, t2.col4, t2.col5
+ FROM df t1
+ LATERAL VIEW EXPLODE (map('A', A, 'B', B, 'C', C, 'D', D, 'E', E, 'F', F, 'G', G,
+ 'H', H, 'I', I, 'J', J, 'K', K, 'L', L, 'M', M, 'N', N, 'O', O, 'P', P, 'Q', Q,
+ 'R', R, 'S', S, 'T', T, 'U', U, 'V', V, 'W', W, 'X', X, 'Y', Y, 'Z', Z)) t2 as col4, col5 ORDER BY col4 DESC")
<DBISparkResult>
SQL CREATE TABLE new_df AS
SELECT CONCAT(t1.col1, t1.col2) AS newcol, t1.col1, t1.col2, t2.col4, t2.col5
FROM df t1
LATERAL VIEW EXPLODE (map('A', A, 'B', B, 'C', C, 'D', D, 'E', E, 'F', F, 'G', G,
'H', H, 'I', I, 'J', J, 'K', K, 'L', L, 'M', M, 'N', N, 'O', O, 'P', P, 'Q', Q,
'R', R, 'S', S, 'T', T, 'U', U, 'V', V, 'W', W, 'X', X, 'Y', Y, 'Z', Z)) t2 as col4, col5 ORDER BY col4 DESC
ROWS Fetched: 0 [complete]
Changed: 0