【发布时间】:2020-07-08 06:10:03
【问题描述】:
我正在尝试从 Cassandra 读取数据并写入特定索引的 Redis。假设是 Redis DB 5。
我需要将所有数据以 hashmap 格式写入 Redis DB 索引 5。
val spark = SparkSession.builder()
.appName("redis-df")
.master("local[*]")
.config("spark.redis.host", "localhost")
.config("spark.redis.port", "6379")
.config("spark.redis.db", 5)
.config("spark.cassandra.connection.host", "localhost")
.getOrCreate()
import spark.implicits._
val someDF = Seq(
(8, "bat"),
(64, "mouse"),
(-27, "horse")
).toDF("number", "word")
someDF.write
.format("org.apache.spark.sql.redis")
.option("keys.pattern", "*")
//.option("table", "person"). // Is it mandatory ?
.save()
我可以在没有表名的情况下将数据保存到 Redis 中吗?实际上只是我想将所有数据保存到没有表名的 Redis 索引 5 中是否可能? 我已经浏览了 spark Redis 连接器的文档,我没有看到任何与此相关的示例。 文档链接:https://github.com/RedisLabs/spark-redis/blob/master/doc/dataframe.md#writing
我目前正在使用这个版本的 spark redis-connector
<dependency>
<groupId>com.redislabs</groupId>
<artifactId>spark-redis_2.11</artifactId>
<version>2.5.0</version>
</dependency>
有人遇到过这个问题吗?有什么解决办法吗?
如果我没有在配置中提及表名,我得到的错误
失败
java.lang.IllegalArgumentException: Option 'table' is not set.
at org.apache.spark.sql.redis.RedisSourceRelation$$anonfun$tableName$1.apply(RedisSourceRelation.scala:208)
at org.apache.spark.sql.redis.RedisSourceRelation$$anonfun$tableName$1.apply(RedisSourceRelation.scala:208)
at scala.Option.getOrElse(Option.scala:121)
at org.apache.spark.sql.redis.RedisSourceRelation.tableName(RedisSourceRelation.scala:208)
at org.apache.spark.sql.redis.RedisSourceRelation.saveSchema(RedisSourceRelation.scala:245)
at org.apache.spark.sql.redis.RedisSourceRelation.insert(RedisSourceRelation.scala:121)
at org.apache.spark.sql.redis.DefaultSource.createRelation(DefaultSource.scala:30)
at org.apache.spark.sql.execution.datasources.SaveIntoDataSourceCommand.run(SaveIntoDataSourceCommand.scala:45)
at org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult$lzycompute(commands.scala:70)
at org.apache.spark.sql.execution.command.ExecutedCommandExec.sideEffectResult(commands.scala:68)
【问题讨论】:
标签: scala dataframe apache-spark pyspark redis