[英]Read avro files in pyspark with PyCharm
我对火花很陌生,我已将 pyspark 库导入到 pycharm venv 并编写以下代码:
# Imports
from pyspark.sql import SparkSession
# Create SparkSession
spark = SparkSession.builder \
.appName('DataFrame') \
.master('local[*]') \
.getOrCreate()
spark.conf.set("spark.sql.shuffle.partitions", 5)
path = "file_path"
df = spark.read.format("avro").load(path)
,一切似乎都没问题,但是当我想阅读 avro 文件时,我收到消息:
pyspark.sql.utils.AnalysisException: '未能找到数据源:avro。 Avro 是自 Spark 2.4 以来的内置但外部数据源模块。 请按照“Apache Avro 数据源指南”的部署部分部署应用程序。;'
当我转到此页面时:>https://spark.apache.org/docs/latest/sql-data-sources-avro.html有这样的东西:
我不知道必须实现这个,在 PyCharm 中下载一些东西,或者你必须找到外部文件来修改?
谢谢你的帮助!
更新 (2019-12-06):因为我使用的是 Anaconda,所以我打开了 Anaconda prompt 并复制了以下代码:
pyspark --packages com.databricks:spark-avro_2.11:4.0.0
它下载了一些模块,然后我回到 PyCharm 并出现相同的错误。
我从 PyCharm 中的pyspark
下载了pyspark
2.4.4
版软件包。 并在 spark 配置中添加了spark-avro_2.11-2.4.4.jar
文件,并且能够成功地重新创建您的错误,即pyspark.sql.utils.AnalysisException: 'Failed to find data source: avro. Avro is built-in but external data source module since Spark 2.4. Please deploy the application as per the deployment section of "Apache Avro Data Source Guide".;'
pyspark.sql.utils.AnalysisException: 'Failed to find data source: avro. Avro is built-in but external data source module since Spark 2.4. Please deploy the application as per the deployment section of "Apache Avro Data Source Guide".;'
要解决此问题,请按照以下步骤操作:
spark-2.4.4-bin-hadoop2.7.tgz
。SPARK_HOME
设置为<download_path>/spark-2.4.3-bin-hadoop2.7
并将PYTHONPATH
设置为$SPARK_HOME/python/lib/py4j-0.10.7-src.zip:$SPARK_HOME/python
spark-avro_2.11-2.4.4.jar
文件。现在您应该能够从 PyCharm 运行 pyspark 代码。 试试下面的代码:
# Imports
from pyspark.sql import SparkSession
from pyspark import SparkConf, SparkContext
#Create SparkSession
spark = SparkSession.builder \
.appName('DataFrame') \
.master('local[*]')\
.config('spark.jars', '<path>/spark-avro_2.11-2.4.4.jar') \
.getOrCreate()
df = spark.read.format('avro').load('<path>/userdata1.avro')
df.show()
上面的代码可以工作,但 PyCharm 会抱怨 pyspark 模块。 要删除它并启用代码完成功能,请遵循以下附加步骤:
spark-2.4.3-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip
现在您的项目结构应如下所示:
pyspark --jars /<path_to>/spark-avro_<version>.jar
Spark 3.0.2 对我有用
简单的解决方案可以使用spark-submit
命令在 pycharm 内的Terminal
选项卡中提交模块,如下所示。
命令的一般语法:
spark-submit --packages <package_name> <script_path>
由于 avro 是所需的包, com.databricks:spark-avro_2.11:4.0.0
应包含com.databricks:spark-avro_2.11:4.0.0
包。 所以最后的命令将是
spark-submit --packages com.databricks:spark-avro_2.11:4.0.0 <script_path>
你的 Spark 版本和你的 avro JAR 版本应该同步
例如:如果您使用的是 spark 3.1.2 并且您的 avro jar 版本应该是 spark-avro_2.12-3.1.2.jar
示例代码:
spark = SparkSession.builder.appName('DataFrame').\
config('spark.jars','C:\\Users\\<<User_Name>>\\Downloads\\spark-avro_2.12-3.1.2.jar').getOrCreate()
df = spark.read.format('avro').load('C:\\Users\\<<user name>>\\Downloads\\sample.avro')
df.show()
Output:
+-------------------+-------+------+------------+------------+--------------------+-------+-----------+--------------------+-----------------+------------------+-------+------------+--------------+--------------+----------+--------------------+
| datetime|country|region|publisher_id|placement_id| impression_id|consent| hostname| uuid|placement_type_id|iab_device_type_id|site_id|request_type|placement_type|bid_url_domain|app_bundle| tps|
+-------------------+-------+------+------------+------------+--------------------+-------+-----------+--------------------+-----------------+------------------+-------+------------+--------------+--------------+----------+--------------------+
|2021-07-30 14:55:18| null| null| 5016| 5016|8bdf2cf1-3a17-473...| 4|test.server|9515d578-9ee0-462...| 0| 5| 5016| advast| video| null| null|{5016 -> {5016, n...|
|2021-07-30 14:55:22| null| null| 2702| 2702|ab3b63d1-a916-4d7...| 4|test.server|9515d578-9ee0-462...| 1| 2| 2702| adi| banner| null| null|{2702 -> {2702, n...|
|2021-07-30 14:55:24| null| null| 1106| 1106|574f078f-0fc6-452...| 4|test.server|9515d578-9ee0-462...| 1| 2| 1106| adi| banner| null| null|{1106 -> {1106, n...|
|2021-07-30 14:55:25| null| null| 1107| 1107|54bf5cf8-3438-400...| 4|test.server|9515d578-9ee0-462...| 1| 2| 1107| adi| banner| null| null|{1107 -> {1107, n...|
|2021-07-30 14:55:27| null| null| 4277| 4277|b3508668-3ad5-4db...| 4|test.server|9515d578-9ee0-462...| 1| 2| 4277| adi| banner| null| null|{4277 -> {4277, n...|
+-------------------+-------+------+------------+------------+--------------------+-------+-----------+--------------------+-----------------+------------------+-------+------------+--------------+--------------+----------+--------------------+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.