【问题标题】:Cannot import parse_url in pyspark无法在 pyspark 中导入 parse_url
【发布时间】: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'))"))

标签: python pyspark hiveql


【解决方案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")')

【讨论】:

    猜你喜欢
    • 2017-12-17
    • 2020-06-07
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    相关资源
    最近更新 更多