删除 pyspark 数据框中值为字符串的行
Remove rows where value is string in pyspark dataframe
我正在尝试使用 Apache Spark 对存储在 MongoDB 数据库中的地理空间数据使用 KMeans。数据具有以下格式,
DataFrame[decimalLatitude: double, decimalLongitude: double, features: vector]
代码如下,其中inputdf
是dataframe
vecAssembler = VectorAssembler(
inputCols=["decimalLatitude", "decimalLongitude"],
outputCol="features")
inputdf = vecAssembler.transform(inputdf)
kmeans = KMeans(k = 10, seed = 123)
model = kmeans.fit(inputdf.select("features"))
数据集中似乎有一些空字符串,因为我得到以下错误,
com.mongodb.spark.exceptions.MongoTypeConversionException: Cannot cast STRING into a IntegerType (value: BsonString{value=''})
我尝试使用
查找此类行
issuedf = inputdf.where(inputdf.decimalLatitude == '')
issuedf.show()
但是我得到了和上面一样的类型转换错误。我也试过df.replace
,但我得到了同样的错误。如何删除存在此类值的所有行?
这个问题可以通过在加载数据时提供数据类型来解决,如下所示,
inputdf = my_spark.read.format("mongo").load(schema=StructType(
[StructField("decimalLatitude", DoubleType(), True),
StructField("decimalLongitude", DoubleType(), True)]))
这确保所有值都是 DoubleType
。现在可以使用 inputdf.dropna()
删除空值
我正在尝试使用 Apache Spark 对存储在 MongoDB 数据库中的地理空间数据使用 KMeans。数据具有以下格式,
DataFrame[decimalLatitude: double, decimalLongitude: double, features: vector]
代码如下,其中inputdf
是dataframe
vecAssembler = VectorAssembler(
inputCols=["decimalLatitude", "decimalLongitude"],
outputCol="features")
inputdf = vecAssembler.transform(inputdf)
kmeans = KMeans(k = 10, seed = 123)
model = kmeans.fit(inputdf.select("features"))
数据集中似乎有一些空字符串,因为我得到以下错误,
com.mongodb.spark.exceptions.MongoTypeConversionException: Cannot cast STRING into a IntegerType (value: BsonString{value=''})
我尝试使用
查找此类行issuedf = inputdf.where(inputdf.decimalLatitude == '')
issuedf.show()
但是我得到了和上面一样的类型转换错误。我也试过df.replace
,但我得到了同样的错误。如何删除存在此类值的所有行?
这个问题可以通过在加载数据时提供数据类型来解决,如下所示,
inputdf = my_spark.read.format("mongo").load(schema=StructType(
[StructField("decimalLatitude", DoubleType(), True),
StructField("decimalLongitude", DoubleType(), True)]))
这确保所有值都是 DoubleType
。现在可以使用 inputdf.dropna()