如何从pyspark的数据框中删除空列
How to remove the empty columns from dataframe of pyspark
我们有一个数据框:
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
现在你可以继续你的工作了。
我们有一个数据框:
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
现在你可以继续你的工作了。