我正在尝试将数据框中的列转换为 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?
谢谢你!
无法转换的值设置为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)
希望这可以帮助!