use*_*624 2 sql scala apache-spark apache-spark-sql
我正在使用spark SQL编写一个UDF,我想知道是否有一个地方我可以阅读文档,确切地知道什么是在这方面不可能的?还是教程?我正在使用SQLContext,而不是HiveContext.
我见过的例子通常包括传入一个字符串,转换它,然后输出一些我成功完成的其他对象的转换字符串.但是如果想要传入一个实际上是某种Spark SQL Row对象的输入,或者一个Row对象列表,每个对象都有键值对的字段,等等.在我的情况下,我正在通过在Row对象列表中,通过告诉UDF输入是List [Map [String,Any]].我认为问题部分是因为它实际上是某种GenericRowWithSchema对象而不是List或Array.
另外,我注意到了带有爆炸选项的LATERAL VIEW.我认为这在理论上适用于我的案例,但它对我不起作用.我想这可能是因为我没有使用HiveContext,但我不能改变它.
我从问题中得到的是首先你想在UDF中读取一行
定义UDF
def compare(r:Row) = {r.get(0)==r.get(1)}
Run Code Online (Sandbox Code Playgroud)
注册UDF
sqlContext.udf.register("compare", compare _)
Run Code Online (Sandbox Code Playgroud)
创建dataFrame
val TestDoc = sqlContext.createDataFrame(Seq(("sachin", "sachin"), ("aggarwal", "aggarwal1"))).toDF("text", "text2")
Run Code Online (Sandbox Code Playgroud)
使用UDF
scala> TestDoc.select($"text", $"text2",callUdf("compare",struct($"text",$"text2")).as("comparedOutput")).show
Run Code Online (Sandbox Code Playgroud)
结果:
+--------+---------+--------------+
| text| text2|comparedOutput|
+--------+---------+--------------+
| sachin| sachin| true|
|aggarwal|aggarwal1| false|
+--------+---------+--------------+
Run Code Online (Sandbox Code Playgroud)
第二个问题是关于具有爆炸选项的LATERAL VIEW,更好地使用HiveContext
| 归档时间: |
|
| 查看次数: |
2451 次 |
| 最近记录: |