python - 将字典保存为 pyspark 数据框并加载它 - Python、Databricks
问题描述
我有一本字典如下:
my_dict = {'a':[12,15.2,52.1],'b':[2.5,2.4,5.2],'c':[1.2,5.3,12]}
我想将这本字典保存在 Databricks 中,以免每次我想开始使用它时都无法获取它。此外,我想知道如何检索它并再次以原始形式保存它。
我尝试过执行以下操作:
from itertools import zip_longest
column_names, data = zip(*my_dict.items())
spark.createDataFrame(zip_longest(*data), column_names).show()
和
column_names, data = zip(*dict_brands.items())
spark.createDataFrame(zip(*data), column_names).show()
但是,我收到以下错误:
zip_longest 参数 #10342 必须支持迭代
我也不知道如何重新加载或上传它。我尝试了一个示例数据框(不是同一个),如下所示:
df.write.format("tfrecords").mode("overwrite").save('/data/tmp/my_df')
错误是:
属性名称“my_column”在“,;{}()\n\t=" 中包含无效字符。请使用别名重命名。
最后,为了得到它,我想到了:
my_df = spark.table("my_df") # Get table
df = my_df.toPandas() # Make pd dataframe
然后将其设为字典,但也许有比将其设为数据框然后作为数据框检索并再次转换回字典更简单的方法。
我还想知道解决方案的计算成本,因为实际数据集非常大。
解决方案
这是我逐步实现您的需求的示例代码。
将字典转换为 Pandas 数据框
my_dict = {'a':[12,15.2,52.1],'b':[2.5,2.4,5.2],'c':[1.2,5.3,12]} import pandas as pd pdf = pd.DataFrame(my_dict)
将 Pandas 数据帧转换为 PySpark 数据帧
df = spark.createDataFrame(pdf)
parquet
使用格式将 PySpark 数据帧保存到文件中。tfrecords
此处不支持格式。df.write.format("parquet").mode("overwrite").save('/data/tmp/my_df')
将上面保存的文件加载为 PySpark 数据框。
df2 = spark.read.format("parquet").load('/data/tmp/my_df')
将 PySpark 数据框转换为字典。
my_dict2 = df2.toPandas().to_dict()
上面这些代码的计算成本取决于实际数据集的内存使用情况。
推荐阅读
- r - 使用拟合的计量经济学/统计模型来求解非线性方程
- javascript - 我应该使用 babel 还是 webpack?
- logging - 禁用 SSHD 的 journactl 日志
- arrays - 2个数组中的共同元素
- python - 我正在尝试了解 yfinance 模块中“日期”字段的格式
- php - HTTP 会话究竟是如何工作的,在什么情况下它会过期(在 Laravel 中)?
- flutter - Flutter 如何听设备暗色主题瞬间变化
- python-3.x - 如何创建一个不停止程序等待用户输入的命令行界面?
- gstreamer - 我可以为 gstreamer 流创建本地 URI
- javascript - 我可以通过将文件附加到 PE.exe / ELF 来创建电子应用程序吗?