Применить преобразования к столбцу RDD при выборе других столбцов в Pyspark - PullRequest
0 голосов
/ 07 апреля 2019

Я хочу иметь возможность выбрать несколько столбцов СДР при применении преобразований к одному из значений. я смогу - выберите конкретные столбцы - применить преобразования к одному из столбцов

Я не могу применить их оба вместе

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):

Пожалуйста, помогите

С уважением Ганеш

1 Ответ

1 голос
/ 07 апреля 2019

Просто примените фильтр с первым элементом в каждой строке после вашей карты, где вы выбираете все нужные столбцы:

rdd.map(lambda line: line.split(",")[:3]) \
   .filter(lambda x: x[0] not in ["DNB", "TDNB", "absent"])
...