gpt4 book ai didi

scala - Spark Redis连接器可将数据写入Redis的特定索引

转载 作者:行者123 更新时间:2023-12-03 06:42:22 30 4
gpt4 key购买 nike

我正在尝试从Cassandra读取数据并写入特定索引的Redis。假设Redis DB 5。
我需要以哈希图格式将所有数据写入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)

最佳答案

table选项是必需的。这个想法是您指定表名,因此可以从提供该表名的Redis读回数据框。
在您的情况下,另一种选择是将数据框转换为键/值RDD并使用sc.toRedisKV(rdd)

关于scala - Spark Redis连接器可将数据写入Redis的特定索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62788563/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com