Я хотел бы иметь возможность использовать методы Java в SparkR SparkDataFrame для записи данных в Cassandra.Serialize SparkR DataFrame to jobj
Используя sparklyr
расширения, например, я могу сделать что-то вроде этого:
sparklyr::invoke(sparklyr::spark_dataframe(spark_tbl), "write") %>>%
sparklyr::invoke("format", "org.apache.spark.sql.cassandra") %>>%
sparklyr::invoke("option", "keyspace", keyspace) %>>%
sparklyr::invoke("option", "table", table) %>>%
sparklyr::invoke("mode", "append") %>%
sparklyr::invoke("save")
, который может достигать скорости записи около 20k строк в секунду.
Для моего варианта использования, я бы хотел использовать SparkR::spark.lapply
, чтобы я мог собирать подмножества своей таблицы Cassandra локально, запускать на них сценарий и записывать данные обратно. Каждый метод, который я пробовал с помощью sparklyr
, оказался однопоточным, и поэтому совсем не использовал искру.
С SparkR
, я могу записать данные, используя что-то вроде:
SparkR::saveDF(SparkR::as.DataFrame(dt_local), "",
source = "org.apache.spark.sql.cassandra",
table = table,
keyspace = keyspace,
mode = "append")
однако скорость записи ближе к 2к строк в секунду в этом случае. Я думаю, что смогу использовать SparkR::sparkR.callJMethod
для вызова той же цепочки, что и в случае с sparklyr
, для достижения более высокой скорости записи, однако мне сначала нужно сериализовать SparkDataFrame
, которые имеют ручку для jobj
, которой я не был способен сделать. Это возможно?
Я также открыт для любых других способов достижения этого, если это возможно. Я исследовал попытку перемещения между sparkR
и sparklyr
, но кажется, что бэкэнды слишком разные (насколько я знаю). Я также считаю, что от here нет аналогичных lapply
для sparklyr
.
Спасибо за любую помощь.