pyspark -我无法从pyspark中的_avro导入

1l5u6lss  于 2023-01-01  发布在  Spark
关注(0)|答案(2)|浏览(158)

我无法在pyspark中导入"from_avro"。
尝试通过调用avro的外部包来运行spark-submit作业
例如:

spark-submit --packages org.apache.spark:spark-avro_2.12:3.0.1 test1.py

我的test1.py文件包含import语句:

from pyspark.sql.avro.functions import from_avro, to_avro

获取:
导入错误:无模块名称avro.函数
我如何使用python代码导入from_avro

6ioyuze2

6ioyuze21#

https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.sql.avro.functions.from_avro.html?highlight=avro
如您所见,从3.0.0开始就可以使用此功能
你用的是哪个spark版本?如果低于3. 0. 0,就不能那样工作了。

pkln4tw6

pkln4tw62#

如果您运行的是Spark 2.4,而不是导入的包所指示的3.0.1,那么您需要自己编写一个 Package 器,因为Spark 2.4只为Java/Scala提供spark-avro。

from pyspark.sql.column import Column, _to_java_column 

def from_avro(col, jsonFormatSchema): 
    sc = SparkContext._active_spark_context 
    avro = sc._jvm.org.apache.spark.sql.avro
    f = getattr(getattr(avro, "package$"), "MODULE$").from_avro
    return Column(f(_to_java_column(col), jsonFormatSchema)) 

def to_avro(col): 
    sc = SparkContext._active_spark_context 
    avro = sc._jvm.org.apache.spark.sql.avro
    f = getattr(getattr(avro, "package$"), "MODULE$").to_avro
    return Column(f(_to_java_column(col)))

确保spark-avro依赖项在提供给--packages时具有指定的正确版本。
如果您运行Spark version〈3的假设是不正确的,请提供更多细节。

相关问题