Объединение каждой пары значений в кортежи в PySpark - PullRequest
0 голосов
/ 24 июня 2018

У меня есть json, который выглядит следующим образом:

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

А вот мой код, который использует PySpark для чтения данных:

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,...

Теперь я хотел бы выполнить операцию, которая выдала бы мне и RDD кортежей из двух:

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

Что было бы правильнымспособ сделать это?

1 Ответ

0 голосов
/ 24 июня 2018
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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...