您可以使用 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