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 如何在Python中将Kafka主题数据加载到Spark数据流中_Apache Spark_Pyspark_Apache Kafka - Fatal编程技术网

Apache spark 如何在Python中将Kafka主题数据加载到Spark数据流中

Apache spark 如何在Python中将Kafka主题数据加载到Spark数据流中,apache-spark,pyspark,apache-kafka,Apache Spark,Pyspark,Apache Kafka,我将Spark 3.0.0与Python一起使用。 我在卡夫卡有一个test\u主题,正在从csv制作 下面的代码是从这个主题到Spark的,但我在某处读到,它需要在一个数据流中,然后我才能对它执行任何ML import json from json import loads from kafka import KafkaConsumer from pyspark import SparkContext from pyspark.streaming import StreamingContext

我将Spark 3.0.0与Python一起使用。 我在卡夫卡有一个
test\u主题
,正在从csv制作

下面的代码是从这个主题到Spark的,但我在某处读到,它需要在一个数据流中,然后我才能对它执行任何ML

import json
from json import loads
from kafka import KafkaConsumer
from pyspark import SparkContext
from pyspark.streaming import StreamingContext

sc = SparkContext("local[2]", "test")
ssc = StreamingContext(sc, 1)

consumer = KafkaConsumer('test_topic',
                    bootstrap_servers =['localhost:9092'],
                    api_version=(0, 10))
消费者返回一个

如何编辑上面的代码以获得数据流

我是新来的,所以请指出任何愚蠢的错误

编辑: 以下是我的制作人代码:

import json
import csv
from json import dumps
from kafka import KafkaProducer
from time import sleep

producer = KafkaProducer(bootstrap_servers=['localhost:9092'])
value_serializer=lambda x:dumps(x)

with open('test_data.csv') as file:
reader = csv.DictReader(file, delimiter=';')
for row in reader:
    producer.send('test_topic', json.dumps(row).encode('utf=8'))
    sleep(2)
    print ('Message sent ', row)

您需要使用KafkaUtils createDirectStream方法

以下是来自的代码示例:


您需要使用KafkaUtils createDirectStream方法

以下是来自的代码示例:


好久没做火花了,让我来帮你吧

首先,当您使用Spark 3.0.0时,您可以使用Spark结构化流媒体,API将更易于使用,因为它基于数据帧。如您所见,有一个结构化流模式下kafka与PySpark的集成指南

它将与此查询一样简单:

df=spark\
.readStream\
.格式(“卡夫卡”)\
.option(“kafka.bootstrap.servers”,“localhost:9092”)\
.选项(“订阅”、“测试主题”)\
.load()
df.selectExpr(“转换(键为字符串)”,“转换(值为字符串)”)
然后,您可以使用ML管道使用此数据帧来应用您需要的一些ML技术和模型。正如您在中所看到的,他们有一些使用ML的结构化流的示例。这是用Scala编写的,但它将是一个很好的灵感来源。您可以将它和,结合起来,用Python进行翻译

编辑:为了在PySpark和Kafka之间工作,需要遵循的实际步骤

1-卡夫卡设置 因此,首先我设置了我的本地卡夫卡:

wgethttps://archive.apache.org/dist/kafka/0.10.2.2/kafka_2.12-0.10.2.2.tgz
tar-xzf卡夫卡2.11-0.10.2.0.tgz
我打开4个shell,运行zookeeper/server/create_topic/write_topic脚本:

  • 动物园管理员
卡夫卡音乐光盘2.11-0.10.2.0 bin/zookeeper-server-start.sh config/zookeeper.properties
  • 服务器
卡夫卡音乐光盘2.11-0.10.2.0 bin/kafka-server-start.sh config/server.properties
  • 创建主题并检查创建
卡夫卡音乐光盘2.11-0.10.2.0 bin/kafka-topics.sh--创建--zookeeper本地主机:2181--复制因子1--分区1--主题测试 bin/kafka-topics.sh--列表--zookeeper本地主机:2181
  • 主题中的测试消息(出于测试目的,在shell中以交互方式编写它们):
卡夫卡音乐光盘2.11-0.10.2.0 bin/kafka-console-producer.sh--代理列表localhost:9092--主题测试 2-PySpark设置 获得额外的罐子 现在我们已经设置了卡夫卡,我们将使用特定的JAR下载设置PySpark:

  • spark-streaming-kafka-0-10-assembly_2.12-3.0.0.jar
wgethttps://repo1.maven.org/maven2/org/apache/spark/spark-streaming-kafka-0-10-assembly_2.12/3.0.0/spark-streaming-kafka-0-10-assembly_2.12-3.0.0.jar
  • spark-sql-kafka-0-10_2.12-3.0.0.jar
wgethttps://repo1.maven.org/maven2/org/apache/spark/spark-sql-kafka-0-10_2.12/3.0.0/spark-sql-kafka-0-10_2.12-3.0.0.jar
  • commons-pool2-2.8.0.jar
wgethttps://repo1.maven.org/maven2/org/apache/commons/commons-pool2/2.8.0/commons-pool2-2.8.0.jar
  • 卡夫卡客户端-0.10.2.2.jar
wgethttps://repo1.maven.org/maven2/org/apache/kafka/kafka-clients/0.10.2.2/kafka-clients-0.10.2.2.jar
运行pysparkshell命令 如果在执行pyspark命令时您不在jars文件夹中,请不要忘记为每个jar指定文件夹路径

PYSPARK\u PYTHON=python3$SPARK\u HOME/bin/PYSPARK--jars SPARK-sql-kafka-0-10\u 2.12-3.0.0.jar,SPARK-streaming-kafka-0-10-assembly\u 2.12-3.0.0.jar,kafka-clients-0.10.2.jar,commons-pool2-2.8.jar
3-运行PySpark代码
df=spark\
.readStream\
.格式(“卡夫卡”)\
.option(“kafka.bootstrap.servers”,“localhost:9092”)\
.期权(“认购”、“测试”)\
.load()
查询=df\
.selectExpr(“转换(键为字符串)”,“转换(值为字符串)”)\
.writeStream\
.格式(“控制台”)\
.start()

干杯

我好久没做任何事了,但让我来帮你吧

首先,当您使用Spark 3.0.0时,您可以使用Spark结构化流媒体,API将更易于使用,因为它基于数据帧。如您所见,有一个结构化流模式下kafka与PySpark的集成指南

它将与此查询一样简单:

df=spark\
.readStream\
.格式(“卡夫卡”)\
.option(“kafka.bootstrap.servers”,“localhost:9092”)\
.选项(“订阅”、“测试主题”)\
.load()
df.selectExpr(“转换(键为字符串)”,“转换(值为字符串)”)
然后,您可以使用ML管道使用此数据帧来应用您需要的一些ML技术和模型。正如您在中所看到的,他们有一些使用ML的结构化流的示例。这是用Scala编写的,但它将是一个很好的灵感来源。您可以将它和,结合起来,用Python进行翻译

编辑:为了在PySpark和Kafka之间工作,需要遵循的实际步骤

1-卡夫卡设置 因此,首先我设置了我的本地卡夫卡:

wgethttps://archive.apache.org/dist/kafka/0.10.2.2/kafka_2.12-0.10.2.2.tgz
tar-xzf卡夫卡2.11-0.10.2.0.tgz
我打开4个shell,运行zookeeper/server/create_topic/write_topic脚本:

  • 动物园管理员
卡夫卡音乐光盘2.11-0.10.2.0 bin/zookeeper-server-start.sh config/zookeeper.properties
  • 服务器
卡夫卡音乐光盘2.11-0.10.2.0 bin/kafka-server-start.sh config/server.properties
  • 创建主题并检查创建
卡夫卡音乐光盘2.11-0.10.2.0 bin/kafka-topics.sh--create--zookeeper localhost:2181--replic
from pyspark.streaming.kafka import KafkaUtils
 directKafkaStream = KafkaUtils.createDirectStream(ssc, [topic], {"metadata.broker.list": brokers})