希望在 PySpark 中将字符串列转换为整数列。无法转换的字符串会怎样?

eca*_*lli 1 python pyspark

我正在尝试将数据框中的列转换为 IntegerType。这是数据框的示例:

+----+-------+
|From|     To|
+----+-------+
|   1|1664968|
|   2|      3|
|   2| 747213|
|   2|1664968|
|   2|1691047|
|   2|4095634|
+----+-------+
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码:

exploded_df = exploded_df.withColumn('From', exploded_df['To'].cast(IntegerType()))
Run Code Online (Sandbox Code Playgroud)

但是,我想知道非数字的字符串会发生什么情况,例如,如果我有一个带有多个空格的字符串会发生什么?原因是我想过滤数据框,以便获取“从”列中“到”列中没有数字的值。

是否有更简单的方法来按此条件进行过滤而不将列转换为 IntegerType?

谢谢你!

dan*_*all 5

无法转换的值设置为null,并且该列将被视为nullable该类型的列。这是一个简单的例子:

from pyspark import SQLContext
from pyspark.sql import SparkSession
import pyspark.sql.functions as F
from pyspark.sql.types import IntegerType

spark = SparkSession.builder.getOrCreate()

sql_context = SQLContext(spark.sparkContext)

df = sql_context.createDataFrame([("1",),
                                  ("2",),
                                  ("3",),
                                  ("4",),
                                  ("hello world",)], schema=['id'])

print(df.show())

df = df.withColumn("id", F.col("id").astype(IntegerType()))

print(df.show())
Run Code Online (Sandbox Code Playgroud)

输出:

+-----------+
|         id|
+-----------+
|          1|
|          2|
|          3|
|          4|
|hello world|
+-----------+

+----+
|  id|
+----+
|   1|
|   2|
|   3|
|   4|
|null|
+----+
Run Code Online (Sandbox Code Playgroud)

并验证架构是否正确:

print(df.printSchema())
Run Code Online (Sandbox Code Playgroud)

输出:

None
root
 |-- id: integer (nullable = true)
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

  • 您可以执行 `df.filter(F.col('x').isNull())` 来获取空值,并执行 `df.filter(F.col('x').isNotNull())` 来获取非空值价值观。 (2认同)