【问题标题】:how to use json files in a dictionary in spark map function?如何在 spark map 函数的字典中使用 json 文件?
【发布时间】:2017-11-14 11:33:52
【问题描述】:

我正在使用 pyspark。

我想在 Google 地图上加载一个常规的 jsonfile,比如“region-polygon-mapping”文件,其中包含区域名称及其多边形。

当我处理另一个数据集 RDD 时,我想在 map 函数中使用“区域多边形映射”,比如测试 RDD 中的点是否在多边形区域中。

问题是如何在 RDD 映射函数中使用 json 作为常规文件。 json 文件非常小,spark 不允许使用 json 作为第二个 rdd,因为我们不能在另一个 rdd 的 map 函数中使用一个 rdd。如果我这样做,这是错误。

pickle.PicklingError: 由于需要深度递归,无法腌制对象。

有什么想法吗?

【问题讨论】:

    标签: json apache-spark pyspark rdd


    【解决方案1】:

    在缺少示例数据的情况下,我假设您的 json 文件具有 {key: value} 结构。无论哪种方式,您都可以使用 json 模块将 json 文件加载到镜像 json 文件的结构中。对于 {key: value} 格式的文件,数据将作为字典加载到 python 中。一旦你有了它,你就可以很容易地使用那个字典来映射你的 rdd。例如,如果您的rdd 是区域的分布式列表,并且 region-polygon-mapping 旨在将区域映射到多边形,那么以下代码将为您提供地图的输出:

    import json
    
    with open('region-polygon-mapping.json','r') as json_data:
        rp_map=json.load(json_data)
    
    mappedrdd=rdd.map(lambda x:rp_map[x])
    

    mappedrdd 现在将是多边形的 rdd。这可能会遗漏一些细节,但应该可以根据您的用例轻松修改。

    【讨论】:

      【解决方案2】:

      我没有使用过 python 或 pyspark,但我会尝试回答这个问题。

      我假设您在处理另一个数据集时尝试使用一个数据集进行查找?如果我错了,请纠正我。

      为此,您需要实现联接。下面是一个小例子,

      假设您有一个包含 countryName 和货币的小型数据集。您必须处理包含 userID、countryName 和其他信息的用户日志。您需要找出哪些用户将拥有哪些货币。

      您需要加入 countryName。

      如果第一个数据集是 RDD,缓存它可能会很有用。

      如果这有帮助,请告诉我。干杯

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-19
        • 2018-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-21
        • 2017-10-28
        • 1970-01-01
        相关资源
        最近更新 更多