- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
尝试使用 Spark 2.3(java) 代码从 Redis 读取数据。能够从Redis读取非流式数据,但无法从Redis读取流式数据,出现以下错误:1)当我将格式指定为:
Dataset<Row> RedisData = spark.readStream()
.format("org.apache.spark.sql.redis")
.option("stream.keys","carsstream")
.schema(UserSchema5)
.load();
错误是:
java.lang.UnsupportedOperationException: Data source org.apache.spark.sql.redis does not support streamed reading
2)当我将格式指定为:
Dataset<Row> RedisData = spark.readStream()
.format("redis")
.option("stream.keys","carsstream")
.schema(UserSchema5)
.load();
错误是
java.lang.ClassNotFoundException: Failed to find data source: redis. Please find packages at http://spark.apache.org/third-party-projects.html
我已经指定了Jedis(版本3.1.0)
,spark-redis(2.3.1)
,spark-core_2.11(版本2.3)的jar .0)
。
任何建议都会有帮助。
最佳答案
根据您面临的错误以及您尝试实现的代码,我推断您正在使用Spark Structured Streaming。请参阅以下片段供您引用。另外,我还共享了 GitHub 存储库的链接,您可以在其中找到完整的代码。
您需要创建一个DataFrame/Dataset
,而不是Streaming DataFrame/Dataset
。因此,你必须这样做:
val keysPattern = s"${topic}:*"
// SCHEMA FOR STATE DATA CACHED IN REDIS DATA
val redisSchema = StructType(
List(
StructField("col1",StringType,true),
StructField("col2",StringType,true),
StructField("col3",StringType,true)
)
)
val redisDf = spark.read
.format("org.apache.spark.sql.redis")
.schema(redisSchema)
.option("keys.pattern", keysPattern)
.load
您可以像这样将这个dataframe
与Streaming DataFrame
连接起来:
// JOIN THE STREAMING DATA WITH REGULAR DATAFRAME
val joinedDf = streamingDf.joinWith(
redisDf,
trim(col("col1")) === trim(col("u_id")),
"left"
).select("_1.*", "_2.*")
常规 DataFrame
和 Streaming DataFrame
的连接会产生 Streaming DataFrame
。要将Streaming DataFrame
写回到Redis,您还需要实现一个foreach writer
。这看起来像这样:
// REDIS CONNECTOR - FOREACHWRITER SINK
val redisForeachWriter : RedisForeachWriter = new RedisForeachWriter("localhost","6379", topic)
// PUSH NEW USER DETAILS TO REDIS FOR STATE REFERENCE
val redisSinkQuery = joinedDf
.select(
"col1", "col2", ... , "coln"
)
.writeStream
.outputMode("update")
.foreach(redisForeachWriter)
.start
示例RedisForeachWriter如下所示:
import org.apache.spark.sql.ForeachWriter
import org.apache.spark.sql.Row
import redis.clients.jedis.Jedis
import scala.collection.mutable.HashMap
import scala.collection.JavaConversions._
import scala.collection.JavaConversions
import org.apache.spark.sql.Dataset
class RedisForeachWriter(val host: String, port: String, val topic: String) extends ForeachWriter[Row]{
// val host: String = p_host
// val port: String = p_port
var jedis: Jedis = _
def connect() = {
jedis = new Jedis(host, port.toInt)
}
override def open(partitionId: Long, version: Long): Boolean = {
return true
}
override def process(record: Row) = {
val u_id = record.getString(1);
if( !(u_id == null || u_id.isEmpty())){
val columns : Array[String] = record.schema.fieldNames
if(jedis == null){
connect()
}
for(i <- 0 until columns.length){
if(! ((record.getString(i) == null) || (record.getString(i).isEmpty()) || record.getString(i) == "") )
jedis.hset(s"${topic}:" + u_id, columns(i), record.getString(i))
}
}
}
override def close(errorOrNull: Throwable) = {
}
}
可以引用我的Github有一个类似的用例供您引用并返回以进行澄清。 https://github.com/krohit-scala/MSStreamingStack
编辑:请在您的应用程序 POM 中添加这些依赖项。
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.3.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.3.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.11</artifactId>
<version>2.3.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.11</artifactId>
<version>2.3.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming-kafka-0-10_2.11</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.redislabs</groupId>
<artifactId>spark-redis</artifactId>
<version>2.3.1</version>
</dependency>
关于java.lang.UnsupportedOperationException : Data source org. apache.spark.sql.redis不支持流式读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58909914/
Schema.org、Goodrelations-vocabulary.org 和 Productontology.org 之间有什么关系? Schema.org 告知,“W3C schema.org
大家好,我想知道包 org.ietf、org.omg、org.w3c 和 org 是如何实现的.xml 已进入 "official" Java classes ? 例如,默认 JDK 不会包含 Apa
首先,我试图用来自 Schema.org 的属性定义数据库表,例如,例如,我有一个名为“JobPosting”的表,它或多或少具有与 http://schema.org/JobPosting 中定义的
我有一个 org.w3c.dom.Document 被 org.dom4j.io.DOMReader 解析。 我想通过 org.w3c.dom.Element 搜索 dom4j DOM 文档。 比方说
我正在将我的应用程序部署到 Tomcat 6.0.20。 应用程序使用 Hibernate 作为 Web 层的 ORM、Spring 和 JSF。 我还从 main() 方法制作了简单的运行器来测试
我有一个使用 hibernate > 4 的 gradle 项目。如果我在 Apache tomcat 中运行我的 war 文件,我不会收到任何错误。但是当我在 Wildfly 8.2 中部署它时,出
我正在尝试将 JaCoCo 添加到我的 Android 以覆盖 Sonar Qube。但是在运行命令 ./gradlew jacocoTestReport 时,我收到以下错误。 Task :app:
如何在 emacs 组织模式中格式化日期? 例如,在下表中,我希望日期显示为“Aug 29”或“Wed, Aug 29”而不是“” #+ATTR_HTML: border="2" rules="all
我想使用 org 模式来写一本技术书籍。我正在寻找一种将外部文件中的现有代码插入到 babel 代码块中的方法,该代码块在导出为 pdf 时会提供很好的格式。 例如 #+BEGIN_SRC pytho
用作引用:https://support.google.com/webmasters/answer/146750?hl=en 您会注意到在“产品”下有一个属性类别,此外页面下方还有一个示例: Too
我读了这个Google doc .它说我们不使用列表中的产品。 那么对于产品列表(具有多页的类似产品的类别,如“鞋子”),推荐使用哪种模式? 我用这个: { "@context": "htt
我目前在做DBpedia数据集,想通过wikidata实现schema.org和DBpedia的映射。因此我想知道 schema.org 和 wikidata 之间是否存在任何映射。 最佳答案 我认为
我爱org-tables ,我用它们来记录各种事情。我现在正在为 Nix 记录一些单行代码(在阅读了 Domen Kožar 的 excellent guide 后,在 this year's Eur
如果看一下 Movie在 schema.org 中输入,actor 和 actors 属性都是允许的(actor 取代 actors)。但是 author 和 contributor 属性没有等效项。
我们有一些餐厅有多个地点或分支机构。我想包含正确的 Schema.org 标记,但找不到任何允许列出多个餐厅的内容。 每家餐厅都有自己的地址、电子邮件、电话和营业时间,甚至可能是“分店名称”。 两个分
我在一个页面中有多个综合评分片段。 有没有办法让其中之一成为默认值?将显示在搜索引擎结果中的那个? 谢谢大家! 更新:该网页本质上是品牌的页面。它包含品牌评论的总评分及其产品列表(每个产品的总评分)。
我提到了一些相关的职位,但并没有解决我的问题。因为我正在使用maven-jar-plugin-2.4 jar。 我正在使用JBoss Developer Studio 7.1.1 GA IDE,并且正
网站的根页面(即 http://example.com/ )的特殊之处在于它是默认的着陆页。它可能包含许多不同的对象类型。 它可能被认为是一个网站,或者一个博客等... 但它是否也应该被标记为给定对象
我想将一些文本放入一个 org 文件中,当我将内容导出到其中一种目标类型(在本例中为 HTML)时,该文件不会发布。有什么方法可以实现这个目标吗? 最佳答案 您可能想要使用 :noexport: 标签
org-mode 是否有一个键绑定(bind)可以在编号/项目符号列表项之间移动,就像您可以对标题一样? 喜欢的功能: org-forward-heading-same-level 大纲下一个可见标题
我是一名优秀的程序员,十分优秀!