2017-02-08 31 views
-2

Я использую Спарк v2.0 и пытается прочитать файл CSV, используя:Spark.read.csv Ошибка: java.io.IOException: Отказано

spark.read.csv("filepath") 

Но получить ошибку ниже:

java.lang.RuntimeException: java.lang.RuntimeException: java.io.IOException: Permission denied 
    at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:522) 
    at org.apache.spark.sql.hive.client.HiveClientImpl.<init>(HiveClientImpl.scala:171) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at org.apache.spark.sql.hive.client.IsolatedClientLoader.createClient(IsolatedClientLoader.scala:258) 
    at org.apache.spark.sql.hive.HiveUtils$.newClientForMetadata(HiveUtils.scala:359) 
    at org.apache.spark.sql.hive.HiveUtils$.newClientForMetadata(HiveUtils.scala:263) 
    at org.apache.spark.sql.hive.HiveSharedState.metadataHive$lzycompute(HiveSharedState.scala:39) 
    at org.apache.spark.sql.hive.HiveSharedState.metadataHive(HiveSharedState.scala:38) 
    at org.apache.spark.sql.hive.HiveSharedState.externalCatalog$lzycompute(HiveSharedState.scala:46) 
    at org.apache.spark.sql.hive.HiveSharedState.externalCatalog(HiveSharedState.scala:45) 
    at org.apache.spark.sql.hive.HiveSessionState.catalog$lzycompute(HiveSessionState.scala:50) 
    at org.apache.spark.sql.hive.HiveSessionState.catalog(HiveSessionState.scala:48) 
    at org.apache.spark.sql.hive.HiveSessionState$$anon$1.<init>(HiveSessionState.scala:63) 
    at org.apache.spark.sql.hive.HiveSessionState.analyzer$lzycompute(HiveSessionState.scala:63) 
    at org.apache.spark.sql.hive.HiveSessionState.analyzer(HiveSessionState.scala:62) 
    at org.apache.spark.sql.execution.QueryExecution.assertAnalyzed(QueryExecution.scala:49) 
    at org.apache.spark.sql.Dataset$.ofRows(Dataset.scala:64) 
    at org.apache.spark.sql.SparkSession.baseRelationToDataFrame(SparkSession.scala:382) 
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:143) 
    at org.apache.spark.sql.DataFrameReader.csv(DataFrameReader.scala:401) 
    at org.apache.spark.sql.DataFrameReader.csv(DataFrameReader.scala:342) 
    ... 48 elided 
Caused by: java.lang.RuntimeException: java.io.IOException: Permission denied 
    at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:515) 
    ... 71 more 
Caused by: java.io.IOException: Permission denied 
    at java.io.UnixFileSystem.createFileExclusively(Native Method) 
    at java.io.File.createTempFile(File.java:2024) 
    at org.apache.hadoop.hive.ql.session.SessionState.createTempFile(SessionState.java:818) 
    at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:513) 
    ... 71 more 

Я также пробовал использовать .format("csv").csv("filepath"), но это также дает те же результаты.

+1

убедитесь, что ваш «путь_к_файл» имеет надлежащее разрешения – Bhavesh

+0

Привет, Bhavesh, путь к файлу имеет следующие разрешения: -rwxr-xr-x 3 pratyush04 hdfs –

ответ

1

Если вы посмотрите на последнюю часть трассировки стека исключения, вы поймете, что эта ошибка не связана с НЕ достаточным доступом к файлу в «путь к файлу».

У меня была аналогичная проблема с использованием оболочки Spark на моем клиенте Windows. Это была ошибка, я получил

at java.io.WinNTFileSystem.createFileExclusively(Native Method) 
    at java.io.File.createTempFile(File.java:2024) 
    at org.apache.hadoop.hive.ql.session.SessionState.createTempFile(SessionState.java:818) 
    at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:513) 

Обратите внимание, как он говорит WinNTFileSystem в трассировке стека (в то время как у вас есть как UnixFileSystem), который заставил меня взглянуть на этот трассировки стека более близко. Я понял, что у текущего пользователя нет доступа для создания временного файла локально. Более конкретно, org.apache.hadoop.hive.ql.session.SessionState пытается создать временный файл в локальном дереве склонов. И если у текущего пользователя недостаточно прав для этого, вы получите эту ошибку.

Для меня в Windows я понял, что мне нужно «запустить как администратор» командную строку, используемую для запуска Spark Shell. И это сработало для меня.

Для вас, в Unix, я думаю, либо sudo, либо обновление конфигурации Hive для установки локального каталога с нуля, или, альтернативно, обновление настроек безопасности каталога для существующей конфигурации Hive должно сделать трюк.

+0

Запуск от имени администратора работал на меня, спасибо! – HuckIt

1

Попробуйте этот код может помочь

Чтобы прочитать данные из Csv

Dataset<Row> src = sqlContext.read() 
     .format("com.databricks.spark.csv") 
     .option("header", "true") 
     .load("Source_new.csv");` 

Чтобы записать данные в Csv

src.write() 
     .format("com.databricks.spark.csv") 
     .option("header", "true") 
     .save("LowerCaseData.csv");