我有带有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())