Как читать CSV в Pyspark как разные типы, или сопоставить набор данных в два разных типа - PullRequest
0 голосов
/ 15 апреля 2020

Есть ли способ отобразить СДР как

covidRDD = sc.textFile("us-states.csv") \
    .map(lambda x: x.split(",")) 

#reducing states and cases by key
reducedCOVID = covidRDD.reduceByKey(lambda accum, n:accum+n)
print(reducedCOVID.take(1))

Набор данных состоит из 1 столбца состояний и 1 столбца наблюдений. Когда он создан, он читается как

[[u'Washington ', u'1'], ...]

Таким образом, я хочу иметь столбец строки и столбец инт. Я делаю проект на RDD, поэтому я хочу избежать использования фрейма данных ... какие-либо мысли?

Спасибо!

1 Ответ

0 голосов
/ 15 апреля 2020

Поскольку набор данных содержит пару ключ-значение, используйте groupBykey и агрегируйте счет.

Если у вас есть набор данных, например [['WH', 10], ['TX', 5], ['WH ', 2], [' IL ', 5], [' TX ', 6]]

Код ниже дает этот вывод - [(' IL ', 5), (' TX ', 11) , ('WH', 12)]

data.groupByKey().map(lambda row: (row[0], sum(row[1]))).collect()

может использовать aggregateByKey с UDF. Для этого метода требуется 3 параметра: начальное местоположение, функция агрегирования внутри раздела и функция агрегации по разделам

Этот код также дает тот же результат, что и выше

def addValues(a,b):
    return a+b
data.aggregateByKey(0, addValues, addValues).collect()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...