我将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
我发现了这张桌子,我不知道这里的问题是什么。 我觉得它是因为我没有创建外部表。但它最后没有外部工作。
答案 0 :(得分:0)
好的,所以我找到了修复,我从目录中移动了文件 即来自
/hive/db/table/file
到
/hive/db/file
做
Hadoop fs -mv /hive/db/table/file /hive/db/file
现在它可以工作,问题是Hive中的union在表之间创建了一个分区,因此创建了另外的目录来保存文件。所以当Spark试图访问它们时,它指向了目录。所以我将文件位置更改为spark指向的位置。