Я хочу иметь возможность выбирать несколько столбцов RDD, применяя преобразования к одному из значений. я способен на - выбрать определенные столбцы - применить преобразования к одному из столбцов
Я не могу применить их оба вместе
1) Выбор определенных столбцов
from pyspark import SparkContext
logFile = "/FileStore/tables/tendulkar.csv"
rdd = sc.textFile(logFile)
rdd.map(lambda line: (line.split(",")[0],line.split(",")[1],line.split(",")
[2])).take(4)
[('Runs', 'Mins', 'BF'),
('15', '28', '24'),
('DNB', '-', '-'),
('59', '254', '172')]
2) Применить преобразования к 1-му столбцу
df=(rdd.map(lambda line: line.split(",")[0])
.filter(lambda x: x ! = "DNB")
.filter(lambda x: x!= "TDNB")
.filter(lambda x: x! = "absent")
.map(lambda x: x.replace("*","")))
df.take(4)
['Runs', '15', '59', '8']
Я попытался сделать их вместе следующим образом
rdd.map(lambda line: ( (line.split(",")[0]).filter(lambda
x:x! = "DNB"),line.split(",")[1],line.split(",")[2])).count()
я получаю сообщение об ошибке
Py4JJavaError Traceback (most recent call last)
<command-2766458519992264> in <module>()
10 .map(lambda x: x.replace("*","")))
11
---> 12 rdd.map(lambda line: ( (line.split(",")[0]).filter(lambda x:x! = "DNB"),line.split(",")[1],line.split(",")[2])).count()
/databricks/spark/python/pyspark/rdd.py in count(self)
1067 3
1068 """
-> 1069 return self.mapPartitions(lambda i: [sum(1 for _ in i)]).sum()
1070
1071 def stats(self):
Пожалуйста помоги
Просто примените фильтр с первым элементом в каждой строке после вашей карты, где вы выбираете все нужные столбцы:
rdd.map(lambda line: line.split(",")[:3]) \
.filter(lambda x: x[0] not in ["DNB", "TDNB", "absent"])
Вам нужно выбрать другие столбцы в последнем map
. .map(lambda x: [x[0].replace("","")] + x[1:])
-Спасибо. Это работает. Мне нужно подумать о синтаксисе (?), который вы включаете!
Один быстрый вопрос. Мне нужно применить преобразование замены "" с "", и когда я это делаю, я снова возвращаюсь к исходной точке, имея только первый столбец rdd.map(lambda line: line.split(",")[:3]) \ .filter(lambda x : x[0] не в ["DNB", "TDNB", "отсутствует"]).map(lambda x:x[0].replace("","")).take(3)