【发布时间】:2020-11-23 12:57:10
【问题描述】:
我有一个 spark 数据框,我正在尝试将其转换为字典列表。我正在这样做,
list(map(lambda row: row.asDict(), df.collect()))
但这会将数据框中的一些十进制值从0.0 转换为decimal(0)。
预期:
[{'Name': 'John','Weight': 0.0, '_id': '0010z00001aZa0RAAS'}]
实际:
[{'Name': 'John','Weight': Decimal('0'), '_id': '0010z00001aZa0RAAS'}]
编辑:
我需要这个,因为我必须将这个确切的列表传递给 MongoDB 进行存储,而 PyMongo 不支持 Decimal('0') 并抛出如下错误:
MongoDB ERROR: data not inserted: cannot encode object: Decimal('0'), of type: <class 'decimal.Decimal'>
我也尝试将 spark df 转换为 pandas df
json.loads(df.toPandas().T.to_json())).values() 获取字典。但是这种方法似乎很慢。
我错过了什么?我是新来的。感谢您的帮助
【问题讨论】:
-
为什么会有问题?鉴于鸭子类型的概念,小数点零是否有过不按你想要的方式嘎嘎叫的时候?
-
因为我必须将这个确切的列表传递给 MongoDB 进行存储。 PyMongo 不支持这个。
-
您可能应该在问题中提及这一点,可能是帮助您发现这一点的例外。
-
@MadPhysicist:十进制对象在正常使用中不会像浮点数那样嘎嘎作响。
decimal.Decimal('0')+1.0引发 TypeError。 -
@Ahalya。您是否接受修复输出或使数据库输入工作的解决方案?还是你更喜欢前者?
标签: python dataframe dictionary pyspark