栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Pyspark使用报错总结

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Pyspark使用报错总结

udf使用: 问题:

不能传入一个df,udf中使用另一个udf,这将抛出一个错误TypeError: cannot pickle '_thread.RLockobject

解决:

使用join的大于小于过滤条件

df1.join(df2, on=[(df2.timestamp > df1.start) & (df2.timestamp < df1.end)]) .groupby('start', 'end', 'event_name') .agg(F.mean('measurement').alias('avg')) .show()

问题:

pysaprk struct类型作为key的map不能转成dict的key

python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型,如:数字、字符串、元组。

字典(dictionary)是除列表意外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

PickleException: expected zero arguments for construction of ClassDict  for pyspark.sql.dtypes._create_row

貌似是由于返回值中包含了numpy.dtype,但是我没有使用,不知道为啥报错。好像是因为类型是map?

解决:

转换成str类型在进行处理或者explore展开处理

from pyspark.sql import Row
>>> eDF = spark.createDataframe([Row(a=1, intlist=[1,2,3], mapfield={"a": "b"})])
>>> eDF.select(explode(eDF.intlist).alias("anInt")).collect()
[Row(anInt=1), Row(anInt=2), Row(anInt=3)]
>>> eDF.select(explode(eDF.mapfield).alias("key", "value")).show()
+---+-----+
|key|value|
+---+-----+
|  a|    b|
+---+-----+

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/357639.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号