整体上一个概念,也是比较麻烦的一个地方。保证数据结构正确输出就可以。这一点还是有点难保证的。
要学会用pandas的df去操作数据。
2018/04/20
想起来了,上次我使用udf的时候是自己想去检测数组的那个。
所以现在记得也比较尴尬。
-
- -l's
这次的话,是想使用groupby的东西。
不过我看了一下,这部分传进去的参数就跟这个原来向量式的不一样了。
变成了pandas的DataFrame类型。
所以,可能的一些使用方式就不一样了。
- -l's
按照官方的示例,好像不太好使。
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())
这个得到的结果是:
![](https://i-blog.csdnimg.cn/blog_migrate/1bad526cef3bea1982f4b839864eadfe.png)
这个结果的却是我预期的。
他的范例是这样的。
![](https://i-blog.csdnimg.cn/blog_migrate/b447bb0beaf7b8daadc4970612f315d5.png)
这个结果呢,其实,没有得到想sql那样的已经group之后的东西。
估计是还需要自己进行后续处理。**而且注意到一句话,他的官方文档里面写到,这个返回的df是可以随意随意长度的。也就是说,我是不是可以继续用pandas自身的聚合操作进行后续操作。
↑,这个是可以得。比如说我做了一些列操作之后,然后要返回这个数据了,只要返回的表结构一致,就是对的。
刚刚测试了head(1)这个操作,就只返回了一行记录。证实这个操作是可以的。
是不是可以返回一个空的DF????(head(0))OK!
比较重点的就是,怎么样传回去的还是一个DF,这又得学习pandas的df一些操作,而且底层的series也是一样的。
特别是说,我想得到类似sql那样的结果,就必须自己对这个传过来的df进行控制。
。。。。这部分还真的是很多问题。就是没办法弄这个东西了就。。。。
对pandas的编程了解太少了。
说一句题外话,我感觉,这个整体的过程,怎么感觉这么复杂,而且,但是我是不是用rdd已经实现过这个功能?????又好像没有。
下面的重点就是去计算一个相似度问题了,这个问题好像比较困难。
因为我计算的是group之后的这个东西,他是两两进行比较;如果真的是存粹两两比较,那就真的很消耗资源了。
很像聚类的那种进行两两计算的类型,???
2018/04/23
昨天晚上临走前,用了一个方差的方式。因为我这个需求比较特殊,他比较的就是固定位置的频繁模式,既然如此,只需要把这个列的方差计算出来就可以。然后统计这么多列里面多少列是0.
这个变化是在另一个文章里面,