ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

No module named 'pyspark.streaming.kafka'

2021-08-24 12:03:05  阅读:258  来源: 互联网

标签:named No python pyspark kafka streaming path spark


一、问题描述

spark版本:2.4.7
pyspark版本:3.1.1
直接使用from pyspark.streaming.kafka import KafkaUtils会提示这个错误。

二、解决方法

1、使用新的api
https://stackoverflow.com/questions/61891762/spark-3-x-integration-with-kafka-in-python
https://spark.apache.org/docs/latest/structured-streaming-kafka-integration.html

2、 spark 2.4.x 版本继续使用pyspark.streaming.kafka
https://sandeepkattepogu.medium.com/streaming-data-from-apache-kafka-topic-using-apache-spark-2-4-5-and-python-4073e716bdca
因为服务器spark版本为2.4.7,所以考虑使用pyspark.streaming.kafka。如链接中博客所言,需要findspark模块。

import findspark
findspark.init()
from pyspark.streaming.kafka import KafkaUtils

这样就不会报错。
问题:findspark.init()完成了什么功能,使得可以找到pyspark.streaming.kafka
其核心源码如下:

if not spark_home:
    spark_home = find()

if not python_path:
    python_path = os.environ.get("PYSPARK_PYTHON", sys.executable) 

# ensure SPARK_HOME is defined
os.environ["SPARK_HOME"] = spark_home

# ensure PYSPARK_PYTHON is defined
os.environ["PYSPARK_PYTHON"] = python_path

# add pyspark to sys.path
spark_python = os.path.join(spark_home, "python")
try:
    py4j = glob(os.path.join(spark_python, "lib", "py4j-*.zip"))[0]
except IndexError:
    raise Exception(
         "Unable to find py4j, your SPARK_HOME may not be configured correctly"
      )
sys.path[:0] = [spark_python, py4j]

找到了环境变量中的SPARK_HOME/home/software/install/spark-2.4.7-bin-hadoop2.7。同时把SPARK_HOME下面的python目录添加到系统变量中
/home/software/install/spark-2.4.7-bin-hadoop2.7/python
进入到该python目录,可以发现存在pyspark/streaming/kafka.py。ps:spark3.x 对应python目录下没有了kafka.py。
综上所述:通过执行find.init(),系统变量里就有了/home/software/install/spark-2.4.7-bin-hadoop2.7/python,所以该目录下的kafka.py就可以import导入。
这里温习import相关知识:
https://blog.csdn.net/weixin_38256474/article/details/81228492
只要模块保存到了sys.path中,python就可以找到它。

3、降低pyspark版本,旧的pyspark中自带pyspark.streaming.kafka
https://stackoverflow.com/questions/63053460/no-module-named-pyspark-streaming-kafka-even-with-older-spark-version

标签:named,No,python,pyspark,kafka,streaming,path,spark
来源: https://www.cnblogs.com/leimu/p/15179692.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有