在Hadoop中运行pyspark时不是文件异常

时间:2016-08-10 17:46:08

标签: hadoop exception hive pyspark pyspark-sql

我将2个差异源中的两个数据集挖掘到Hive中。我使用

在hive中创建了两个表的联合
create table db.table as select table 1 union select table 2

我在HysContext的pyspark中使用这个表来执行一些分析函数,比如列的字符串索引。

hc=HiveContext(sc)
data = hc.sql("select * from db.table")
from pyspark.sql import SQLContext, Row, HiveContext
from pyspark.ml.feature import StringIndexer
indexer = StringIndexer(inputCol="col_cat", outputCol="cat_indexed")
indexed=indexer.fit(data).transform(data)

但是我收到以下错误

py4j.protocol.Py4JJavaError: An error occurred while calling o63.fit.
: java.io.IOException: Not a file: 

所以我进入了HDFS

hadoop fs -ls /hive/db/table

我发现了这张桌子,我不知道这里的问题是什么。 我觉得它是因为我没有创建外部表。但它最后没有外部工作。

1 个答案:

答案 0 :(得分:0)

好的,所以我找到了修复,我从目录中移动了文件 即来自

/hive/db/table/file

/hive/db/file

Hadoop fs -mv /hive/db/table/file /hive/db/file

现在它可以工作,问题是Hive中的union在表之间创建了一个分区,因此创建了另外的目录来保存文件。所以当Spark试图访问它们时,它指向了目录。所以我将文件位置更改为spark指向的位置。