Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何在Scala中序列化字符串_Apache Spark_Serialization_Apache Kafka - Fatal编程技术网

Apache spark 如何在Scala中序列化字符串

Apache spark 如何在Scala中序列化字符串,apache-spark,serialization,apache-kafka,Apache Spark,Serialization,Apache Kafka,我有一个数据流[字符串,字符串]。我使用foreachRDD获取每个RDD,并在Kafka中发布它。 我遇到的问题是我需要保证字符串是序列化的,并且我的RDD的值是不可序列化的,因为未知的原因。Kafka希望得到一个StringSerializer作为值,但正如您在下面的图像中看到的,我的数据流没有序列化的字符串。在发布到Kafka之前,如何将不可序列化的字符串转换为serializabel?我可以更改kafConf,但我更喜欢更改值而不是Kafka配置 def kafkaConf(brok

我有一个数据流[字符串,字符串]。我使用foreachRDD获取每个RDD,并在Kafka中发布它。 我遇到的问题是我需要保证字符串是序列化的,并且我的RDD的值是不可序列化的,因为未知的原因。Kafka希望得到一个StringSerializer作为值,但正如您在下面的图像中看到的,我的数据流没有序列化的字符串。在发布到Kafka之前,如何将不可序列化的字符串转换为serializabel?我可以更改kafConf,但我更喜欢更改值而不是Kafka配置

  def kafkaConf(brokers : String) = {
    val props = new HashMap[String, Object]()
    props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, brokers)
    props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer")
    props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer")
    props
  }

如果没有代码,我无法说出确切的解决方案。我认为你的问题与卡夫卡的财产无关

在错误日志中,Spark尝试序列化一个类,但失败了


请检查foreachRDD块中的代码。我认为你使用了一个不可改变的类。检查类,如果可以的话,将可序列化实现添加到类中。或者尝试使用字符串类型。

错误没有说明任何关于字符串的内容。数据流是不可序列化的,这意味着您已经在执行器作用域之间共享了部分数据流,这使得Spark认为需要对其进行序列化

您确实应该显示所有代码,但要使用KafkaProducer是Spark Streaming,您需要使用foreachPartition,然后在该块中创建一个生产者

对于每个分区,循环每个RDD,然后使用KafkaProducer.send方法


您不必担心序列化,除非您想定义自己的

为什么不共享制作人的代码?Spark Streaming已被弃用。你为什么不使用结构化流媒体?请不要用图片来解释我的错误,因为我没有提供更多关于我错误的细节。我收到了老师们关于问题的答案。问题在于火花的背景。我将spark上下文作为参数传递,它不可序列化。我必须通过一个变量传递它,然后它就可以序列化了。这有点奇怪。。。但它现在起作用了。最终问题出在spark上下文上。我将spark上下文作为参数传递,spark上下文不可序列化。