在PySp中将每对值组合成元组

2024-04-26 04:31:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个json,看起来像这样:

{
    "cols": [
        "id",
        "value"
    ],
    "data": [
        [
            1,
            "0.10259593440335"
        ],
        [
            2,
            "0.0061205302736639"
        ],
        [
            3,
            "-0.36367513456978"
        ],
        [
            4,
            "0.080167833573921"
        ],
        .
        .
        .

下面是我使用Pypark读取数据的代码:

import sys
sys.path.insert(0, '.')
from pyspark import SparkContext, SparkConf

def strip(line: str):
    if line[-1] == ',':
        return float(line[3:-1])
    else:
        return float(line[4:-1])

if __name__ == "__main__":
    conf = SparkConf().setAppName("airports").setMaster("local[*]")

    sc = SparkContext(conf = conf)

    json = sc.textFile("dataMay-31-2017.json")
    jsonCol = json.filter(lambda line: '\t\t\t' in line)
    jsonCol = jsonCol.map(strip)

在最后一次映射操作之后,我得到了包含以下元素的和RDD:

[1.0, 0.10259593440335, 2.0, 0.0061205302736639, 3.0, -0.36367513456978, 4.0, 0.080167833573921,...

现在我要执行一个操作,它将给出两个元组的me和RDD:

[(1.0, 0.10259593440335), (2.0, 0.0061205302736639), (3.0, -0.36367513456978), (4.0, 0.080167833573921),...

正确的方法是什么?你知道吗


Tags: importjsonreturnifconfsyslinefloat
1条回答
网友
1楼 · 发布于 2024-04-26 04:31:56
from pyspark.sql.functions import explode
df=spark.read.json('dataMay-31-2017.json',multiLine=True)
ndf=df.select(explode(df.data))
ndf.rdd.map(lambda r:tuple(r.col))

相关问题 更多 >