小编ser*_*e_k的帖子

遇到缺失功能时,Apache Spark会抛出NullPointerException

在为要素中的字符串列编制索引时,我对PySpark有一个奇怪的问题.这是我的tmp.csv文件:

x0,x1,x2,x3 
asd2s,1e1e,1.1,0
asd2s,1e1e,0.1,0
,1e3e,1.2,0
bd34t,1e1e,5.1,1
asd2s,1e3e,0.2,0
bd34t,1e2e,4.3,1
Run Code Online (Sandbox Code Playgroud)

我在'x0'中有一个缺失值.首先,我正在使用pyspark_csv将csv文件中的功能读入DataFrame:https://github.com/seahboonsiew/pyspark-csv 然后使用StringIndexer索引x0:

import pyspark_csv as pycsv
from pyspark.ml.feature import StringIndexer

sc.addPyFile('pyspark_csv.py')

features = pycsv.csvToDataFrame(sqlCtx, sc.textFile('tmp.csv'))
indexer = StringIndexer(inputCol='x0', outputCol='x0_idx' )
ind = indexer.fit(features).transform(features)
print ind.collect()
Run Code Online (Sandbox Code Playgroud)

当调用''ind.collect()''时,Spark会抛出java.lang.NullPointerException.一切都适用于完整的数据集,例如,对于'x1'.

有没有人知道造成这种情况的原因以及如何解决这个问题?

提前致谢!

谢尔盖

更新:

我使用Spark 1.5.1.确切的错误:

File "/spark/spark-1.4.1-bin-hadoop2.6/python/pyspark/sql/dataframe.py", line 258, in show
print(self._jdf.showString(n))

File "/spark/spark-1.4.1-bin-hadoop2.6/python/lib/py4j-0.8.2.1-src.zip/py4j/java_gateway.py", line 538, in __call__

File "/spark/spark-1.4.1-bin-hadoop2.6/python/lib/py4j-0.8.2.1-src.zip/py4j/protocol.py", line 300, in get_return_value

py4j.protocol.Py4JJavaError: An error occurred while calling o444.showString.
: java.lang.NullPointerException
at org.apache.spark.sql.types.Metadata$.org$apache$spark$sql$types$Metadata$$hash(Metadata.scala:208)
at org.apache.spark.sql.types.Metadata$$anonfun$org$apache$spark$sql$types$Metadata$$hash$2.apply(Metadata.scala:196)
at org.apache.spark.sql.types.Metadata$$anonfun$org$apache$spark$sql$types$Metadata$$hash$2.apply(Metadata.scala:196)
... etc
Run Code Online (Sandbox Code Playgroud)

我试图在不读取csv文件的情况下创建相同的DataFrame, …

python apache-spark apache-spark-sql pyspark apache-spark-ml

14
推荐指数
1
解决办法
8325
查看次数