【发布时间】:2019-11-14 03:47:42
【问题描述】:
我正在尝试对使用 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,但我得到了同样的错误。如何删除存在此类值的所有行?
【问题讨论】:
-
请在您的问题中包含导致错误的代码。
-
@cronoik,我进行了编辑。错误一定是因为
features属性中的字符串。但是,由于它是由decimalLatitude和decimalLongitude创建的,我相信问题一定出在其中一个或两个上。该代码也适用于同一父数据集的不同子集。 -
你有一个数据框,它的模式可能是 [int, int] 但有些行有字符串值。我相信您必须在创建数据框之前过滤字符串值(即使将它们转换为 None 也可以),否则您将无法使用该数据框。在这里查看接受的answer。
标签: python apache-spark pyspark pyspark-dataframes