pow*_*wer 0 apache-spark pyspark
我已经通过以下方式创建了一个DataFrame:
from pyspark.sql import SparkSession
spark = SparkSession \
.builder \
.appName("Python Spark SQL basic example") \
.getOrCreate()
df = spark.read.csv("train.csv", header=True)
Run Code Online (Sandbox Code Playgroud)
我的DataFrame的架构如下:
root
|-- PassengerId: string (nullable = true)
|-- Survived: string (nullable = true)
|-- Pclass: string (nullable = true)
|-- Name: string (nullable = true)
|-- Sex: string (nullable = true)
|-- Age: string (nullable = true)
|-- SibSp: string (nullable = true)
|-- Parch: string (nullable = true)
|-- Ticket: string (nullable = true)
|-- Fare: string (nullable = true)
|-- Cabin: string (nullable = true)
|-- Embarked: string (nullable = true)
Run Code Online (Sandbox Code Playgroud)
如何更改DataFrame每列的数据类型?
我知道我可以在对csv()的调用中指定schema选项,但是我想稍后再更改数据类型。
一些列缺少值。Spark DataFrames如何处理缺失值?
要更改数据类型,您可以例如执行cast。例如,考虑iris数据集where SepalLengthCm是type的列int。如果要将该int强制转换为字符串,则可以执行以下操作:
df.withColumn('SepalLengthCm',df['SepalLengthCm'].cast('string'))
Run Code Online (Sandbox Code Playgroud)
当然,根据情况,您可以从a string到an 相反int。您也可以使用其他语法访问列:
df.withColumn('SepalLengthCm',df.SepalLengthCm.cast('string'))
Run Code Online (Sandbox Code Playgroud)
或者,from pyspark.sql.functions import col您可以导入(无需直接处理df):
df.withColumn('SepalLengthCm',col('SepalLengthCm').cast('string'))
Run Code Online (Sandbox Code Playgroud)
您可以使用df.na.drop(how='any', thresh=None, subset=None)(或df.dropna())处理空值。这是文档页面,您可以在其中检查参数的含义。
返回一个新的DataFrame,省略具有空值的行。DataFrame.dropna()和DataFrameNaFunctions.drop()是彼此的别名。参数:
- 方式-“任何”或“全部”。如果为“ any”,则在其中包含任何null的情况下删除一行。如果为“ all”,则仅当其所有值均为null时才删除一行。
- thresh – int,默认值无如果指定,则删除小于thresh非空值的行。这将覆盖how参数。
- 子集–要考虑的可选列名称列表。
如果遇到空值,也可以选择分配一个特定值。这次您应该使用df.na.fill(value, subset=None)(或df.fillna())。这是文档页面。
替换空值,na.fill()的别名。DataFrame.fillna()和DataFrameNaFunctions.fill()是彼此的别名。参数:
- 值– int,long,float,string或dict。用于替换空值的值。如果该值为dict,则将忽略子集,并且该值必须是从列名(字符串)到替换值的映射。替换值必须是int,long,float,boolean或string。
- 子集–要考虑的可选列名称列表。子集中指定的不具有匹配数据类型的列将被忽略。例如,如果value是一个字符串,并且子集包含一个非字符串列,则该非字符串列将被忽略。
| 归档时间: |
|
| 查看次数: |
1750 次 |
| 最近记录: |