udf聚合类型

整体上一个概念,也是比较麻烦的一个地方。保证数据结构正确输出就可以。这一点还是有点难保证的。
要学会用pandas的df去操作数据。

2018/04/20
想起来了,上次我使用udf的时候是自己想去检测数组的那个。
所以现在记得也比较尴尬。

    • -l's
      这次的话,是想使用groupby的东西。
      不过我看了一下,这部分传进去的参数就跟这个原来向量式的不一样了。
      变成了pandas的DataFrame类型。
      所以,可能的一些使用方式就不一样了。

按照官方的示例,好像不太好使。
http://spark.apache.org/docs/latest/sql-programming-guide.html#grouped-map

明白了,出错的原因是因为
http://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.GroupedData.apply
他这个,跟内置的agg不太一样,所以这种方式,可能工作的和sql的那种工作的结果不一样。
2018/04/21

不对不对,还是没有理解明白。
他的范例呢,用的是一个修饰器,注意第一个参数呢,就是返回的数据结构,他是用字符串表示的内建的数据结构。
也就是说,我这里要他返回的就是我这里要求的。

而且,我就得好好学一下这个pandas的DataFrame的操作方式了,以及整体的这个数据操作流程。

比如说,举例,我想得到范例里面的东西。

49     @pandas_udf("time int",PandasUDFType.GROUPED_MAP)
 50     def check_same(data):
 51         v = data.time                                  
 52         return pandas.DataFrame(v - v.mean())

这个得到的结果是:

image.png

这个结果的却是我预期的。
他的范例是这样的。
image.png

这个结果呢,其实,没有得到想sql那样的已经group之后的东西。
估计是还需要自己进行后续处理。**而且注意到一句话,他的官方文档里面写到,这个返回的df是可以随意随意长度的。也就是说,我是不是可以继续用pandas自身的聚合操作进行后续操作。
↑,这个是可以得。比如说我做了一些列操作之后,然后要返回这个数据了,只要返回的表结构一致,就是对的。
刚刚测试了head(1)这个操作,就只返回了一行记录。证实这个操作是可以的。
是不是可以返回一个空的DF????(head(0))OK!

比较重点的就是,怎么样传回去的还是一个DF,这又得学习pandas的df一些操作,而且底层的series也是一样的。
特别是说,我想得到类似sql那样的结果,就必须自己对这个传过来的df进行控制。

。。。。这部分还真的是很多问题。就是没办法弄这个东西了就。。。。
对pandas的编程了解太少了。


说一句题外话,我感觉,这个整体的过程,怎么感觉这么复杂,而且,但是我是不是用rdd已经实现过这个功能?????又好像没有。


下面的重点就是去计算一个相似度问题了,这个问题好像比较困难。
因为我计算的是group之后的这个东西,他是两两进行比较;如果真的是存粹两两比较,那就真的很消耗资源了。
很像聚类的那种进行两两计算的类型,???
2018/04/23
昨天晚上临走前,用了一个方差的方式。因为我这个需求比较特殊,他比较的就是固定位置的频繁模式,既然如此,只需要把这个列的方差计算出来就可以。然后统计这么多列里面多少列是0.
这个变化是在另一个文章里面,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值