繁体   English   中英

将字典另存为 pyspark Dataframe 并加载它 - Python,Databricks

[英]Save dictionary as a pyspark Dataframe and load it - 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 必须支持迭代

我也不知道如何重新加载或上传它。 我尝试了一个示例 dataframe(不是同一个),如下所示:

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

然后将其设为字典,但也许有比将其设为 dataframe 然后检索为 dataframe 并再次转换为字典更简单的方法。

我还想知道解决方案的计算成本,因为实际数据集非常大。

这是我逐步实现您的需求的示例代码。

  1. 将字典转换为 Pandas dataframe

     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)

    在此处输入图像描述

  2. 将 Pandas dataframe 转换为 PySpark Z6A8064B5DF479455500553C47C5505

     df = spark.createDataFrame(pdf)

    在此处输入图像描述

  3. 使用parquet格式将 PySpark dataframe 保存到文件中。 此处不支持tfrecords格式。

     df.write.format("parquet").mode("overwrite").save('/data/tmp/my_df')

    在此处输入图像描述

  4. 将上面保存的文件加载为 PySpark dataframe。

     df2 = spark.read.format("parquet").load('/data/tmp/my_df')

    在此处输入图像描述

  5. 将 PySpark dataframe 转换为字典。

     my_dict2 = df2.toPandas().to_dict()

    在此处输入图像描述

上面这些代码的计算成本取决于实际数据集的 memory 使用情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM