验证Pyspark DataFrame中列的数据类型



我有带有3列的Pyspark DataFrame。蜂巢表'test1'的DDL都具有字符串数据类型。因此,如果我做df.printschema,则所有都是字符串数据类型,如下所示,

>>> df = spark.sql("select * from default.test1")
>>> df.printSchema()                                                                                                                                                                     
root                                                                                                                                                                                       
 |-- c1: string (nullable = true)                                                                                                                                            
 |-- c2: string (nullable = true)                                                                                                                                        
 |-- c3: string (nullable = true)  
+----------+--------------+-------------------+                                                                                                                 
|c1        |c2            |c3                 |                                                                                                                 
+----------+--------------+-------------------+                                                                                                                 
|April     |20132014      |4                  |                                                                                                                 
|May       |20132014      |5                  |                                                                                                                 
|June      |abcdefgh      |6                  |                                                                                                                 
+----------+--------------+-------------------+ 

现在,我只想过滤" C2"列中整数类型的记录。因此,基本上我只需要前2个记录,即" 20132014"类型。并排除其他记录。

一行:

df.withColumn("c2", df["c2"].cast("integer")).na.drop(subset=["c2"])

如果c2不是有效的整数,它将是NULL并在后续步骤中删除。

不更改类型

valid = df.where(df["c2"].cast("integer").isNotNull())
invalid = df.where(df["c2"].cast("integer").isNull())

相关内容

  • 没有找到相关文章