将地图列表保存到 csv pyspark

Posted

技术标签:

【中文标题】将地图列表保存到 csv pyspark【英文标题】:saving list of map to csv pyspark 【发布时间】:2018-01-29 10:42:08 【问题描述】:

我有一个类似于以下的数据框

new_df = spark.createDataFrame([
(['product_code': '12', 'color': 'red', 'product_code': '212', 'color': 'white'], 7),
(['product_code': '1112', 'color': 'black'], 8),
(['product_code': '212', 'color': 'blue'], 3)
], ["items", "frequency"])

我需要创建一个类似于以下的数据框,以便我可以轻松地保存到 csv 中:(相同列表数据的规则编号相同)

+-------------------------------------------
# |rule            | product_code |color      |
# +-------------------------------------------
# |1               | 12           |       red  |
# |1               | 212          |       white|
# |2               | 1122         |       black|
# |3               | 212          |       blue |
# +--------------------------------------------

【问题讨论】:

【参考方案1】:

您可以添加monotonically_increasing_id作为标识符和explode

from pyspark.sql.functions import explode, monotonically_increasing_id, col

(new_df
    .withColumn("rule", monotonically_increasing_id())
    .withColumn("items", explode("items"))
    .select(
        "rule",
        col("items")["product_code"].alias("product_code"),
        col("items")["color"].alias("color"))
    .show())

# +-----------+------------+-----+
# |       rule|product_code|color|
# +-----------+------------+-----+
# | 8589934592|          12|  red|
# | 8589934592|         212|white|
# |17179869184|        1112|black|
# |25769803776|         212| blue|
# +-----------+------------+-----+

可以使用zipWithIndex 获得连续的 id,但它需要与 Python RDD 进行昂贵的转换。

【讨论】:

以上是关于将地图列表保存到 csv pyspark的主要内容,如果未能解决你的问题,请参考以下文章

将包含长列表的 Pandas df 保存为 csv 文件

使用 Dart 和 Flutter,我如何将动态小部件中的数据保存到另一个列表中的地图列表中

列表视图中的 csv 和复选框将选中的复选框代码保存在 ArrayAdapter 中

将xgboost二进制预测保存到提交csv文件

d3.js 地图:使用 geojson 文件和 CSV 数据

如何使用带有新行的python将列表保存为.csv文件?