Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Databricks环境中的SparkSessionExtensions函数_Apache Spark_Apache Spark Sql_Databricks - Fatal编程技术网

Apache spark Databricks环境中的SparkSessionExtensions函数

Apache spark Databricks环境中的SparkSessionExtensions函数,apache-spark,apache-spark-sql,databricks,Apache Spark,Apache Spark Sql,Databricks,SparkSessionExtensions函数在本地工作,但我无法让它在Databricks环境中工作 该项目定义了Catalyst表达式,如age,我可以通过spark sql在本地成功使用这些表达式: bin/spark-sql --packages com.github.yaooqinn:itachi_2.12:0.1.0 --conf spark.sql.extensions=org.apache.spark.sql.extra.PostgreSQLExtensions 我在Data

SparkSessionExtensions函数在本地工作,但我无法让它在Databricks环境中工作

该项目定义了Catalyst表达式,如
age
,我可以通过
spark sql
在本地成功使用这些表达式:

bin/spark-sql --packages com.github.yaooqinn:itachi_2.12:0.1.0 --conf spark.sql.extensions=org.apache.spark.sql.extra.PostgreSQLExtensions
我在Databricks环境中很难让它正常工作

我用
spark.sql.extensions=org.apache.spark.sql.extra.PostgreSQLExtensions
配置选项集启动了一个Databricks社区集群

然后我连接了图书馆

itachi中定义的
array\u append
函数无法像我预期的那样访问:

确认配置选项设置正确:


火花炼金术有一种在Databricks环境下工作的方法。为了在Databricks环境中工作,我们是否需要处理Spark内部构件?或者有没有办法让
injectFunction
在Databricks中工作?

spark.sql.extensions在完整的Databricks上工作得很好(直到它深入到spark的内部-有时存在不兼容),但在Community Edition上就不行了。问题是,
spark.sql.extensions
在会话初始化期间被调用,UI中指定的库随后被安装,所以这在初始化之后/与初始化并行发生。在完整的Databrick上,通过在群集启动之前使用安装库来解决此问题,但此功能在Community Edition上不可用

解决方法是显式注册函数,如下所示:

%scala
导入org.apache.spark.sql.catalyst.expressions.postgresql.{Age、ArrayAppend、ArrayLength、IntervalJustifIke、Scale、SplitPart、StringToArray、UnNest}
导入org.apache.spark.sql.extra.functionases
spark.sessionState.functionRegistry.registerFunction(Age.fd.\u 1,Age.fd.\u 2,Age.fd.\u 3)
spark.sessionState.functionRegistry.registerFunction(functionases.array\u cat.\u 1,functionases.array\u cat.\u 2,functionases.array\u cat.\u 3)
spark.sessionState.functionRegistry.registerFunction(ArrayAppend.fd.\u 1,ArrayAppend.fd.\u 2,ArrayAppend.fd.\u 3)
spark.sessionState.functionRegistry.registerFunction(ArrayLength.fd._1,ArrayLength.fd._2,ArrayLength.fd._3)
spark.sessionState.functionRegistry.registerFunction(IntervalJustifIke.JustifDays.\u 1,IntervalJustifIke.JustifDays.\u 2,IntervalJustifIke.JustifDays.\u 3)
spark.sessionState.functionRegistry.registerFunction(IntervalJustifIke.JustifHours.\u 1,IntervalJustifIke.JustifHours.\u 2,IntervalJustifIke.JustifHours.\u 3)
spark.sessionState.functionRegistry.registerFunction(IntervalJustifIke.JustifInterval.\u 1,IntervalJustifIke.JustifInterval.\u 2,IntervalJustifIke.JustifInterval.\u 3)
spark.sessionState.functionRegistry.registerFunction(Scale.fd.\u 1,Scale.fd.\u 2,Scale.fd.\u 3)
spark.sessionState.functionRegistry.registerFunction(SplitPart.fd.\u 1,SplitPart.fd.\u 2,SplitPart.fd.\u 3)
spark.sessionState.functionRegistry.registerFunction(StringToArray.fd.\u 1,StringToArray.fd.\u 2,StringToArray.fd.\u 3)
spark.sessionState.functionRegistry.registerFunction(UnNest.fd.\u 1,UnNest.fd.\u 2,UnNest.fd.\u 3)
在这之后,它会起作用:


它不像扩展那样方便,但这是CE的一个限制。

因此,为了在完整的Databrick上运行,我需要通过init脚本安装lib(而不是在集群启动后安装lib)?你能提供一个代码片段吗?谢谢它只是一个shell脚本,可以从DBFS复制文件(如
/DBFS/some_location
),也可以从internet下载文件,并将其放入
/databricks/jars
。请参见此处的示例:
spark-sql> select age(timestamp '2000', timestamp'1990');
10 years