我想在数据块中将org.apache.spark.sql.DataFrame转换为org.apache.spark.rdd.RDD[(String, String)]。有人能帮忙吗?
背景(也欢迎更好的解决方案):我有一个kafka流(经过一些步骤后)成为一个2列数据帧。我想把它放到redis缓存中,第一列作为键,第二列作为值。
更具体地说,输入的类型是:lastContacts: org.apache.spark.sql.DataFrame = [serialNumber: string, lastModified: bigint]。我试着把它放在redis中,如下所示:sc.toRedisKV(lastContacts)(redisConfig)
错误消息如下:
notebook:20: error: type mismatch;
found : org.apache.spark.sql.DataFrame
(which expands to) org.apache.spark.sql.Dataset[org.apache.spark.sql.Row]
required: org.apache.spark.rdd.RDD[(String, String)]
sc.toRedisKV(lastContacts)(redisConfig)
我已经有了一些想法(比如function.rdd),但没有任何帮助。
最佳答案
如果要将行映射到其他RDD元素,可以使用df.map(row=>…)将数据帧转换为RDD。
例如:val df = Seq(("table1",432),
("table2",567),
("table