如何从pyspark的数据框中删除空列

How to remove the empty columns from dataframe of pyspark

name data

我们有一个数据框:

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 != ''").

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

res=names.filter("Name != ''") # I have applied filter on 'Name' column of your data.

希望这就是你想要的。

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

输入

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)
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("Test_Parquet").master("local[*]").getOrCreate()
names = spark.read.csv("name.csv", header="true", inferSchema="true")
names.show()
temp = list(names.columns)
print(temp)
temp.remove(" 1")
temp.remove(" 3")
temp.remove("_c5")
print(temp)
names = names.select(temp)
names.show()

如果您在使用 read.csv 时创建数据框,那么 spark 会自动为未命名的列提供默认名称,您将不得不删除该列的 explicitly.But 它会抛出以下错误:

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

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