PySpark:NULL从CSV加载的数据框中的值,在跨函数中被跳过

时间:2019-04-04 21:08:09

标签: pyspark pyspark-sql

我通过从HDFS加载一个csv文件创建了一个数据框。该文件中的某些列为空(说名称(字符串),ID(整数),等级(双精度))。

一旦我加载数据而没有定义架构(StructField和StructType),所有记录都将出现并且空列值将出现。但是当我做一个过滤器时,空值被跳过了。

一旦我通过定义自定义架构加载数据,如果任何列值都为null,那么整个行将显示为null。

所以我无法以任何一种方式处理数据。我希望所有数据都被加载。我尝试了IS NULL,NA replace和all,但没有任何效果。

任何解决方案表示赞赏


Sample data loaded in HDFS  :  test_data.csv
Name,ID,Average
"Yahoo",100,10.5
"Google",,10.5
"Apple",100,
"Samsung",,


Code Snippet

file_path='/user/abc/test_data.csv'
from pyspark.sql.types import (StructField, StructType, StringType, IntegerType, DoubleType)
data_schema = [StructField('Name', StringType(), True),
               StructField('ID', IntegerType(), True),
               StructField('Average', DoubleType(), True)
               ]
final_struct = StructType(fields=data_schema)


df_data_csv = spark.read.format('csv').options(header='true',inferschema='true',schema=final_struct).load(file_path)
df_data_csv.printSchema()
 |-- Name: string (nullable = true)
 |-- ID: string (nullable = true)
 |-- Average: string (nullable = true)

问题1 :代替int和double,所有字段均作为StringType加载             如果我使用的是“ spark.read.format”方法。但是,如果正在使用“ spark.read.csv”模式,则可以正确使用

问题2 :如果我使用定义了架构的方法“ spark.read.csv”               df_data_csv.show()将所有属性都设置为null(如果任何列值为null)            如果我不使用上面定义的架构而继续使用方法“ spark.read.csv”
              当我在计算中使用数字字段时,它会忽略至少1列值为null的记录

0 个答案:

没有答案