【问题标题】:ImportError: No module named 'kafka' in databricks pysparkImportError:databricks pyspark 中没有名为“kafka”的模块
【发布时间】:2021-07-25 18:49:19
【问题描述】:

我无法在 databricks 笔记本中使用 kafka 库。

得到错误 ImportError: No module named 'kafka'

from kafka import KafkaProducer
def send_to_kafka(rows):
    producer = KafkaProducer(bootstrap_servers = "localhost:9092")
    for row in rows:
        producer.send('topic', str(row.asDict()))  
        producer.flush()

df.foreachPartition(send_to_kafka)

databricks 集群信息

spark 版本 - 2.4.3

scala 版本 - 2.11

帮帮我。提前致谢。

【问题讨论】:

    标签: python apache-spark pyspark databricks


    【解决方案1】:

    不要这样做-效率很低,只需使用kafka connector to write data,就像这样(您需要先将数据转换为JSON字符串):

    from pyspark.sql.functions import to_json, struct
    df.select(to_json(struct("*")).alias("value"))\
      .write.format("kafka")\
      .option("kafka.bootstrap.servers", "host1:port1,host2:port2")\
      .option("topic", "topic1")\
      .save()
    

    【讨论】:

    • 收到错误。 @Alex Ott SyntaxError:无效语法文件“”,第 4 行 .write.format("kafka") ^ SyntaxError:无效语法
    • 已修复 - 忘记在一处添加``
    • 现在出现错误:java.lang.NoClassDefFoundError: org/apache/spark/sql/connector/catalog/TableProvider
    • 您使用的是什么 Databricks 运行时?或者您使用的是 Light 版本?只使用普通的 Databricks 运行时 - 例如 7.x - 代码肯定在那里工作
    【解决方案2】:

    该文件不在正确的目录中,或者在错误的位置。或者,您从未安装过它,但我认为它不是可下载的模块。

    【讨论】:

    • 是的,它没有安装。它是一个名为“kafka”的python包。官方python kafka客户端。
    • 但问题是我也无法从 kafka-python 官方文档中下载它。
    【解决方案3】:

    您需要确保所有执行程序节点上都可以使用 python 依赖项。 有以下选项:

    a) 在启动集群之前,在所有执行程序节点上运行引导程序包安装脚本。例如。在所有节点上运行pip install kafka。 (最好使用依赖管理解决方案)

    b) 在本地安装软件包。使用 pyspark 选项之一将依赖项发送到节点: --py-files, --archive.

    c) 使用 pex 将完整的 python 解释器与所有本地安装的依赖项打包在一起。配置 spark 以使用打包的 pex 存档中的 python 解释器。

    请参阅 Spark 用户指南:Python Packaging

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-31
      • 2021-01-18
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      • 2020-02-07
      相关资源
      最近更新 更多