如何从pyspark的dataframe中删除空列

如何从pyspark的dataframe中删除空列,pyspark,pyspark-dataframes,Pyspark,Pyspark Dataframes,我们有一个数据帧: names = spark.read.csv("name.csv", header="true", inferSchema="true").rdd 我想这样做: res=names.filter(lambda f: f['Name'] == "Diwakar").map(lambda name: (name['Name'], name['Age'])) res.toDF(['Name','Age']).write.csv("final", mode="overwrite",

我们有一个数据帧:

names = spark.read.csv("name.csv", header="true", inferSchema="true").rdd
我想这样做:

res=names.filter(lambda f: f['Name'] == "Diwakar").map(lambda name: (name['Name'], name['Age']))
res.toDF(['Name','Age']).write.csv("final", mode="overwrite", header="true")

但空列造成了问题。

如果要删除pyspark数据框中的空行数据,请执行以下操作:

newDF=oldDF.filter(“colName!=”)

在您的情况下,您可以过滤初始的
名称
数据框并应用您的条件:

res=names.filter("Name != ''") # I have applied filter on 'Name' column of your data.
我希望这就是您想要的。

只需使用一个简单的选择, 我假设空列是“”

输入

df = sqlContext.createDataFrame([(1,"", "x"," "), (2,"", "b"," "), (5,"", "c"," "), (8,"", "d"," ")], ("st"," ", "ani"," "))

+---+---+---+---+
| st|   |ani|   |
+---+---+---+---+
|  1|   |  x|   |
|  2|   |  b|   |
|  5|   |  c|   |
|  8|   |  d|   |
+---+---+---+---+

a=list(set(df.columns))
a.remove(" ")
df=df.select(a)
df.show()

+---+---+
|ani| st|
+---+---+
|  x|  1|
|  b|  2|
|  c|  5|
|  d|  8|
+---+---+
""" 
Do your Operations
"""
完成上述步骤后,继续执行任务。这将删除空白列

新编辑:

没有这样的方法在阅读时删除空列,你必须自己做

您可以这样做:

a = list(set(df.columns))
new_col = [x for x in a if not x.startswith("col")] #or what ever they start with

df=df.select(new_col)
如果在使用read.csv时创建数据框,则spark将自动为未命名列指定默认名称,并且必须显式删除该列的名称。但它会引发以下错误:

CSV header does not conform to the schema.
 Header: Name,  , Age,  , Class, 
 Schema: Name,  1, Age,  3, Class, _c5

现在你可以继续你的工作了。

数据在哪里?@abhishekhmishra现在,我已经添加了csv文件的链接为什么
lambda
?哦,请再看一次数据,数据有没有名字的空列。我想知道如何删除空列。这就是代码的作用。。我还添加了一个示例,它确实删除了自建数据框的空列…..但是如果我们将使用read.csv创建数据框,则默认名称将指定给空列名称…..我们可以克服此错误吗?有没有办法将csv文件保持原样?我们可以停止spark将默认名称添加到列中吗?请再次查看数据,数据中有空列,但没有名称。我想知道如何删除空列。@ishwar,你能解决它吗,如何解决?有没有办法使csv文件保持原样。。。。我们能不能停止spark在列中添加默认名称。。。。我也在寻找同样的答案……但到目前为止,我还没有这个问题的答案。。。。。
CSV header does not conform to the schema.
 Header: Name,  , Age,  , Class, 
 Schema: Name,  1, Age,  3, Class, _c5