我在 Impala 中使用了一个内置函数,比如:
select id, parse_url(my_table.url, "QUERY", "extensionId") from my_table
现在我正在迁移到sparksql(使用jupyter笔记本中的pyspark):
my_table.select(my_table.id.cast('string'), parse_url(my_table.url.cast('string'), "QUERY", "extensionId")).show()
但是,我得到了以下错误:
NameError: name 'parse_url' is not defined
还尝试了以下方法:
my_table.registerTempTable("my_table")
sqlContext.sql("select id, url, parse_url(url, 'QUERY', 'extensionId') as new_url from my_table").show(100)
但是所有的 new_url
变成 null
.
你知道我错过了什么吗?另外,人们会如何处理这样的问题?谢谢!
1条答案
按热度按时间wnvonmuf1#
一些缺失部分:
不能用spark执行impala函数。
有一个具有相同名称和语法的配置单元udf可以与spark一起使用,但它没有本机实现和函数 Package 器。这就是为什么可以使用sql调用它
HiveContext
/SparkSession
有Hive的支持。一般来说,它应该工作得很好:
以及
NULL
输出意味着给定部分无法匹配:使用自定义项可以获得类似的结果,但速度会明显减慢。
数据定义为:
其用途如下:
结果是: