如何读取要在 pyspark MLlib 中使用的 csv?
How to read a csv to use in pyspark MLlib?
我有一个 csv 文件,我试图将其用作 pyspark 中 KMeans 算法的输入。我正在使用 MLlib 文档中的代码。
from pyspark.ml.clustering import KMeans
from pyspark.ml.evaluation import ClusteringEvaluator
# Loads data.
dataset = spark.read.format("libsvm").load("P.txt")
# Trains a k-means model.
kmeans = KMeans().setK(2).setSeed(1)
model = kmeans.fit(dataset)
# Make predictions
predictions = model.transform(dataset)
# Evaluate clustering by computing Silhouette score
evaluator = ClusteringEvaluator()
silhouette = evaluator.evaluate(predictions)
print("Silhouette with squared euclidean distance = " + str(silhouette))
# Shows the result.
centers = model.clusterCenters()
print("Cluster Centers: ")
for center in centers:
print(center)
我遇到错误:
java.lang.NumberFormatException: For input string: "-6.71,-1.14"
我尝试将文件读取为
dataset = spark.read.format("csv").load("P.txt")
但是我得到另一个错误:
java.lang.IllegalArgumentException: Field "features" does not exist. Available fields: _c0, _c1
我是 pyspark 的初学者,我试图寻找这方面的教程,但没有找到。
勾选读取CSV文件的方法:
df = spark.read.options(header=True).csv('csvFile.csv')
df.show()
Available fields: _c0, _c1
检查数据文件的第一行。很有可能,您在创建时将其保存到 hdfs 时没有使用 headers=True
参数。
我发现了问题。 kmeans.fit
的 DataFrame 输入需要有一个字段 "features",正如错误 java.lang.IllegalArgumentException: Field "features" does not exist. Available fields: _c0, _c1
所指出的那样。
为此我们需要一个 VectorAssembler
,但在我们需要将列转换为数字类型之前,否则我们会得到错误 java.lang.IllegalArgumentException: Data type string of column _c0 is not supported
.
from pyspark.sql.functions import col
df = spark.read.csv('P.txt')
# Convert columns to float
df = df.select(*(col(c).cast("float").alias(c) for c in df.columns))
assembler = VectorAssembler(
inputCols=["_c0", "_c1"],
outputCol="features")
df = assembler.transform(df)
df = df.drop("_c0")
df = df.drop("_c1")
df.show()
我有一个 csv 文件,我试图将其用作 pyspark 中 KMeans 算法的输入。我正在使用 MLlib 文档中的代码。
from pyspark.ml.clustering import KMeans
from pyspark.ml.evaluation import ClusteringEvaluator
# Loads data.
dataset = spark.read.format("libsvm").load("P.txt")
# Trains a k-means model.
kmeans = KMeans().setK(2).setSeed(1)
model = kmeans.fit(dataset)
# Make predictions
predictions = model.transform(dataset)
# Evaluate clustering by computing Silhouette score
evaluator = ClusteringEvaluator()
silhouette = evaluator.evaluate(predictions)
print("Silhouette with squared euclidean distance = " + str(silhouette))
# Shows the result.
centers = model.clusterCenters()
print("Cluster Centers: ")
for center in centers:
print(center)
我遇到错误:
java.lang.NumberFormatException: For input string: "-6.71,-1.14"
我尝试将文件读取为
dataset = spark.read.format("csv").load("P.txt")
但是我得到另一个错误:
java.lang.IllegalArgumentException: Field "features" does not exist. Available fields: _c0, _c1
我是 pyspark 的初学者,我试图寻找这方面的教程,但没有找到。
勾选读取CSV文件的方法:
df = spark.read.options(header=True).csv('csvFile.csv')
df.show()
Available fields: _c0, _c1
检查数据文件的第一行。很有可能,您在创建时将其保存到 hdfs 时没有使用 headers=True
参数。
我发现了问题。 kmeans.fit
的 DataFrame 输入需要有一个字段 "features",正如错误 java.lang.IllegalArgumentException: Field "features" does not exist. Available fields: _c0, _c1
所指出的那样。
为此我们需要一个 VectorAssembler
,但在我们需要将列转换为数字类型之前,否则我们会得到错误 java.lang.IllegalArgumentException: Data type string of column _c0 is not supported
.
from pyspark.sql.functions import col
df = spark.read.csv('P.txt')
# Convert columns to float
df = df.select(*(col(c).cast("float").alias(c) for c in df.columns))
assembler = VectorAssembler(
inputCols=["_c0", "_c1"],
outputCol="features")
df = assembler.transform(df)
df = df.drop("_c0")
df = df.drop("_c1")
df.show()