无法在 pyspark 中导入 parse_url

Posted

技术标签:

【中文标题】无法在 pyspark 中导入 parse_url【英文标题】:Cannot import parse_url in pyspark 【发布时间】:2019-11-07 10:04:27 【问题描述】:

我有这个 sql 查询,用于 pyspark 中的 hiveql:

spark.sql('SELECT split(parse_url(page.viewed_page, "PATH"), "/")[1] as path FROM df')

我想翻译成功能查询,例如:

df.select(split(parse_url(col('page.viewed_page'), 'HOST')))

但是当我导入 parse_url 函数时,我得到:

----> 1 from pyspark.sql.functions import split, parse_url

ImportError: cannot import name 'parse_url' from 'pyspark.sql.functions' (/usr/local/opt/apache-spark/libexec/python/pyspark/sql/functions.py)

您能否指出我导入 parse_url 函数的正确方向。

干杯

【问题讨论】:

也可以使用expr:df.select(expr("split(parse_url(page.viewed_page, 'HOST'))")) 【参考方案1】:

parse_url 是 Hive UDF,因此您需要在创建 SparkSession object() 时启用 Hive 支持

spark = SparkSession.builder.enableHiveSupport().getOrCreate()

那么您的以下查询应该可以工作:

spark.sql('SELECT split(parse_url(page.viewed_page, "PATH"), "/")[1] as path FROM df')

如果你的 Spark 是 <2.2:

from pyspark import SparkContext
from pyspark.sql import HiveContext, SQLContext

sc = SparkContext()

sqlContext = SQLContext(sc)
hivContext = HiveContext(sc)

query = 'SELECT split(parse_url(page.viewed_page, "PATH"), "/")[1] as path FROM df'

hivContext.sql(query) # this will work
sqlContext.sql(query) # this will not work

编辑:

parse_url 是 Spark v2.3 的内置 SparkSQL。截至目前(2020 年 11 月 28 日),它在 pyspark.sql.functions 中不可用。您仍然可以通过使用 selectExpr 在 pyspark 数据帧上使用它,如下所示:

df.selectExpr('parse_url(mycolumn, "HOST")')

【讨论】:

以上是关于无法在 pyspark 中导入 parse_url的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Databricks pyspark 中导入 Excel 文件

如何在 Zeppelin notebook 和 pyspark 中导入 Delta Lake 模块?

为啥要在 PySpark 中导入熊猫?

如何在 PySpark 中从表中导入数据时排除 Header

ImportError:无法在 IPython 中导入名称“SparkContext”

在 pyspark 的映射器中导入错误