Csv 基于PCA的PySpark不规则执行

Csv 基于PCA的PySpark不规则执行,csv,pyspark,pca,Csv,Pyspark,Pca,我正在使用PySpark通过csv文件进行PCA。我有一些奇怪的行为;我的代码有时工作正常,但有时返回以下错误: File "C:/spark/spark-2.1.0-bin-hadoop2.7/bin/pca_final2.py", line 25, in <module> columns = (fileObj.first()).split(';') File "C:\spark\spark-2.1.0-bin-hadoop2.7\python\lib\pyspark.zip\p

我正在使用PySpark通过csv文件进行PCA。我有一些奇怪的行为;我的代码有时工作正常,但有时返回以下错误:

 File "C:/spark/spark-2.1.0-bin-hadoop2.7/bin/pca_final2.py", line 25, in <module>
columns = (fileObj.first()).split(';')
File "C:\spark\spark-2.1.0-bin-hadoop2.7\python\lib\pyspark.zip\pyspark\rdd.py", line 1361, in first
File "C:\spark\spark-2.1.0-bin-hadoop2.7\python\lib\pyspark.zip\pyspark\rdd.py", line 1343, in take
File "C:\spark\spark-2.1.0-bin-hadoop2.7\python\lib\pyspark.zip\pyspark\context.py", line 965, in runJob
File "C:\spark\spark-2.1.0-bin-hadoop2.7\python\lib\py4j-0.10.4-src.zip\py4j\java_gateway.py", line 1133, in __call__
File "C:\spark\spark-2.1.0-bin-hadoop2.7\python\lib\pyspark.zip\pyspark\sql\utils.py", line 63, in deco
File "C:\spark\spark-2.1.0-bin-hadoop2.7\python\lib\py4j-0.10.4-src.zip\py4j\protocol.py", line 319, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.runJob.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 1 times, most recent failure: Lost task 0.0 in stage 0.0 (TID 0, localhost, executor driver): java.net.SocketException: Connection reset by peer: socket write error

为什么我会被不定期处决?我应该添加什么来解决这个问题。

在创建
数据
帧时,您没有过滤掉标题。假设列名是字符串,这将导致错误,因为列名无法转换为浮点值。请参见下面的脚本修改部分,该部分使用
过滤器删除标题

fileObj = sc.textFile('e:/iris.data.txt')
header = fileObj.first()
data = fileObj.filter(lambda x: x != header).map(lambda line: [float(k) for k in line.split(';')])
columns = header.split(';')
df = spark.createDataFrame(data, columns)
df.show()

在这里,错误会在第
行columns=(fileObj.first()).split(“;”)
处通知。基本上,您是在
(;)
的基础上尝试
拆分
fileObj
的第一行。这里执行的操作顺序是错误的,因为在上一步中,行已经转换为列表

正确的操作顺序如下(
列行应在数据行之前):-

错误原因:-行(数据=)具有fileObj.map行.split(“;”)。它已经根据
(;)


如果您在csv中有作为文本的标题,并且希望从数据中删除,请遵循Jaco answer
filter(lambda x:x!=标题)

您能给我们提供
bigiris.csv
的前几行吗;2.3.4.5.6.7.8.9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50头看起来一样吗?是的,所有文件都有相同的结构
fileObj = sc.textFile('e:/iris.data.txt')
header = fileObj.first()
data = fileObj.filter(lambda x: x != header).map(lambda line: [float(k) for k in line.split(';')])
columns = header.split(';')
df = spark.createDataFrame(data, columns)
df.show()
fileObj = sc.textFile('bigiris.csv')
columns = (fileObj.first()).split(';')
data = fileObj.map(lambda line: [float(k) for k in line.split(';')])
df = spark.createDataFrame(data, columns)