【问题标题】:How to create variable PySpark Dataframes by Dropping Null columns如何通过删除 Null 列来创建可变 PySpark 数据帧
【发布时间】:2021-02-11 19:36:08
【问题描述】:

我在名为“source_data”的相对文件夹中有 2 个 JSON 文件

“source_data/data1.json”

{ 
    "name": "John Doe", 
    "age": 32, 
    "address": "ZYZ - Heaven"
} 

“source_data/data2.json”

{
    "userName": "jdoe", 
    "password": "password", 
    "salary": "123456789"
}

我使用以下 PySpark 代码创建了 DataFrame:

from pyspark.sql import SparkSession

spark = SparkSession \
    .builder \
    .appName("Python Spark SQL basic example") \
    .config("spark.some.config.option", "some-value") \
    .getOrCreate()

df = spark.read.json("source_data")

print(df.head())

输出:

df.head(10)
[行(姓名='John Doe',年龄=32,地址='ZYZ - 天堂',用户名=无,密码=无,薪水=无), 行(姓名=无,年龄=无,地址=无,用户名='jdoe',密码='密码',薪水='123456789')]

现在我想通过删除 'None' 类型的列值来创建可变数量的 DataFrame,如下所示:

df1.head()
[Row(name='John Doe', age=32, address='ZYZ - Heaven']

和,

df2.head()
[行(用户名='jdoe',密码='密码',薪水='123456789')]

我只是在寻找基于所有或任何列删除整行的解决方案

有什么方法可以实现我想要的吗?

TIA

【问题讨论】:

  • JSON 文件位于同一文件夹中。这只是我发布的示例,实际文件夹有数百万个文件。
  • 您可以在初始数据帧上进行选择以获取所需的列,然后过滤以删除具有 null 或 None 值的行

标签: pyspark apache-spark-sql pyspark-dataframes


【解决方案1】:

您可以在不同的数据框中选择您需要的列,然后根据条件进行过滤。

//source data
val df = spark.read.json("path")
//select and filter 
val df1 = df.select("address","age","name")
.filter($"address".isNotNull || $"age".isNotNull || $"name".isNotNull)
val df2 = df.select("password","salary","userName")
.filter($"password".isNotNull || $"salary".isNotNull || $"userName".isNotNull)
//see the output as dataframe or using head as you want
println(df1.head)
df2.head

head 命令的输出 df1:

df2:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多