我有3列的pyspark数据帧。 hive表'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'。并排除其他记录。
答案 0 :(得分:2)
在一行中:
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())