无法在 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 中从表中导入数据时排除 Header