Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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
Python 3.x 如何使用python将kafka消费者数据映射到Mysql_Python 3.x_Apache Spark_Apache Kafka_Kafka Consumer Api_Spark Structured Streaming - Fatal编程技术网

Python 3.x 如何使用python将kafka消费者数据映射到Mysql

Python 3.x 如何使用python将kafka消费者数据映射到Mysql,python-3.x,apache-spark,apache-kafka,kafka-consumer-api,spark-structured-streaming,Python 3.x,Apache Spark,Apache Kafka,Kafka Consumer Api,Spark Structured Streaming,我的主机配置如下: # To find out where the pyspark import sys from kafka import KafkaProducer,KafkaConsumer import findspark from boto3 import * import boto3 import json findspark.init() # Creating Spark Context from pyspark import SparkContext from pyspark.

我的主机配置如下:

# To find out where the pyspark
import sys
from kafka import KafkaProducer,KafkaConsumer
import findspark
from boto3 import *
import boto3
import json

findspark.init()
# Creating Spark Context
from pyspark import SparkContext
from pyspark.sql import SparkSession
def get_connection(self):
     spark = SparkSession.builder.master("local[*]").appName("SparkByExamples.com").getOrCreate()  
     return spark   

def json_serializer(data):
     return json.dumps(data).encode("utf-8")
    

def read_s3():
    p1 = KafkaProducer(bootstrap_servers=['broker:29092'], value_serializer=json_serializer)
    
    s3 = boto3.resource('s3')
    bucket = s3.Bucket('kakfa')
    for obj in bucket.objects.all():
        key = obj.key
        body = obj.get()['Body'].read().decode('utf-8')
    p1.send("Uber_Eats",body)
    p1.flush()
def read_from_topic(self,spark):
    df = spark.readStream \
        .format("kafka") \
        .option("kafka.bootstrap.servers", "broker:29092") \
        .option("subscribe", "Uber_Eats") \
         .option("startingOffsets", "earliest") \
        .load()
    df2 = df \
        .writeStream \
        .format("console") \
        .start()
    print(df2.awaitTermination()  )  
def get_consumer(self):
    consumer = KafkaConsumer("Uber_Eats", group_id='group1', bootstrap_servers=
    "broker:29092",value_deserializer=lambda x: json.loads(x.decode('utf-8')))
    return  consumer   
def print_details(self,c1):
    for msg in c1:
          print(msg.value)
    print("Dom  dfe")            
           
          
class Foo:
    def __init__(self):
                 
        spark = get_connection(self)
        read_s3()
        # System.setProperty("hadoop.home.dir", "$HADOOP_HOME\winutils-master\hadoop-2.x.x")
        c1 = get_consumer(spark)
        print_details(self,c1)


f = Foo()  
卡夫卡, 火花, Mysql, 你在码头上吗

我的代码如下:

# To find out where the pyspark
import sys
from kafka import KafkaProducer,KafkaConsumer
import findspark
from boto3 import *
import boto3
import json

findspark.init()
# Creating Spark Context
from pyspark import SparkContext
from pyspark.sql import SparkSession
def get_connection(self):
     spark = SparkSession.builder.master("local[*]").appName("SparkByExamples.com").getOrCreate()  
     return spark   

def json_serializer(data):
     return json.dumps(data).encode("utf-8")
    

def read_s3():
    p1 = KafkaProducer(bootstrap_servers=['broker:29092'], value_serializer=json_serializer)
    
    s3 = boto3.resource('s3')
    bucket = s3.Bucket('kakfa')
    for obj in bucket.objects.all():
        key = obj.key
        body = obj.get()['Body'].read().decode('utf-8')
    p1.send("Uber_Eats",body)
    p1.flush()
def read_from_topic(self,spark):
    df = spark.readStream \
        .format("kafka") \
        .option("kafka.bootstrap.servers", "broker:29092") \
        .option("subscribe", "Uber_Eats") \
         .option("startingOffsets", "earliest") \
        .load()
    df2 = df \
        .writeStream \
        .format("console") \
        .start()
    print(df2.awaitTermination()  )  
def get_consumer(self):
    consumer = KafkaConsumer("Uber_Eats", group_id='group1', bootstrap_servers=
    "broker:29092",value_deserializer=lambda x: json.loads(x.decode('utf-8')))
    return  consumer   
def print_details(self,c1):
    for msg in c1:
          print(msg.value)
    print("Dom  dfe")            
           
          
class Foo:
    def __init__(self):
                 
        spark = get_connection(self)
        read_s3()
        # System.setProperty("hadoop.home.dir", "$HADOOP_HOME\winutils-master\hadoop-2.x.x")
        c1 = get_consumer(spark)
        print_details(self,c1)


f = Foo()  
以上代码的输出如下所示:

{
    
        {
            "Customer Number": "1",
            "Customer Name": "Shyam",
            "Restaurant Number": "2201",
            "Restaurant NameOrdered": "Bawarchi",
            "Number of Items": "3",
            "price": "10",
            "Operating Start hours": "9:00",
            "Operating End hours": "23:00"
        },
        {
            "Customer Number": "2",
            "Customer Name": "Rohini",
            "Restaurant Number": "2202",
            "Restaurant NameOrdered": "Sarvana Bhavan",
            "Number of Items": "4",
            "price": "20",
            "Operating Start hours": "8:00",
            "Operating End hours": "20:00"
        },
        {
            "Customer Number": "3",
            "Customer Name": "Bhairav",
            "Restaurant Number": "2203",
            "Restaurant NameOrdered": "Taco Bell",
            "Number of Items": "5",
            "price": "30",
            "Operating Start hours": "11:00",
            "Operating End hours": "21:00"
        }
    
}
如何将这些内容读入mysql? i) 它是否像一个常规的json文件,读取和插入

ii)或者我们是否有任何特定于kakfa消费者“json”格式的信息

iii)我已指定值\u反序列化器=lambda x:json.loads(x.decode('utf-8'))

在json格式的代码中,这是将数据加载到mysql所必需的吗

谢谢

阿迪

它是否像一个常规的json文件,读取和插入

不知道你这是什么意思。Mysql不接受json文件

Spark有自己的JSON文件读取器,但您是在读卡夫卡的文章,所以这无关紧要

我们是否有特定于kakfa消费者“json”格式的内容

对<代码>强制转换(值为字符串)然后是各种
get\u json\u对象
调用。我已经把你和这个联系起来了

我已经指定了值\u反序列化器=lambda x:json.loads(x.decode('utf-8'))

这不是火花。我不知道你为什么还有这个。其次,
def get_consumer(self)
不接受或使用您传递的
spark
变量,并且您没有类定义,因此不建议使用
self
作为命名参数(换句话说,您的所有函数都应该在
class Foo
中,但您也根本不需要类)

重要细节-您显示的文件不是有效的JSON,因此无论如何,这些方法都不会立即起作用

tl;dr-假设您确实想要使用Spark

  • 使用您编写的使用Spark consumer的函数

  • 替换

  • 使用,
    .writeStream.format(“jdbc”).save(“jdbc:mysql/…”)
    但仅在修改数据帧以匹配数据库架构之后


    否则,如果您不再需要Spark,那么JSON或Kafka是一个实现细节——下载并配置Mysql python客户端,然后像普通一样插入数据——在事务、回滚、错误处理、准备好的查询等方面要小心



    或者,正如多次回答和评论的那样,以及更具容错性的解决方案,忘记Python并使用Kafka Connect(Kafka bin目录中提供的脚本,无需编码)

    要将数据从卡夫卡发送到另一个系统或从另一个系统发送到卡夫卡,您可以使用卡夫卡连接器这里有一个链接可以帮助您启动:不,我不想使用spark streaming,我通过Kafka consumer和表单获取输出,我试图在那里输入MySQL。您也指定了这不是有效的JSON格式,您能告诉我fomrat看起来有多有效吗?我会相应地更改。那么您为什么要调用
    spark=get\u connection(self)
    ?还是使用火花代码?把你的数据放在这里,它会告诉你出了什么问题(你最外层的括号应该是
    []
    ,或者你需要该对象中每个值的键),除此之外(假设你的print details函数真的可以工作,但我不认为是因为其他语法问题),就像我说的,卡夫卡在这里真的不重要。制作一个简单的脚本,从JSON字符串列表开始,解析/写入mysql;一旦你能很好地工作,用你的consumerPlus替换这个列表,因为Kafka是一个实现细节,有很多其他的问题显示你到底想要什么-或者熊猫