在Pyspark中选择其他列时,在RDD列上应用转换

问题描述 投票:0回答:1

我希望能够在将转换应用于其中一个值时选择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):

请帮忙

关心Ganesh

pyspark rdd
1个回答
1
投票

只需在地图后的每一行中应用带有第一个元素的过滤器,您可以在其中选择所需的所有列:

rdd.map(lambda line: line.split(",")[:3]) \
   .filter(lambda x: x[0] not in ["DNB", "TDNB", "absent"])
© www.soinside.com 2019 - 2024. All rights reserved.