J'essaie de lire un fichier dans mes hdfs. Voici une présentation de ma structure de fichiers hadoop.
hduser@GVM:/usr/local/spark/bin$ hadoop fs -ls -R /
drwxr-xr-x - hduser supergroup 0 2016-03-06 17:28 /inputFiles
drwxr-xr-x - hduser supergroup 0 2016-03-06 17:31 /inputFiles/CountOfMonteCristo
-rw-r--r-- 1 hduser supergroup 2685300 2016-03-06 17:31 /inputFiles/CountOfMonteCristo/BookText.txt
Voici mon code pyspark:
from pyspark import SparkContext, SparkConf
conf = SparkConf().setAppName("myFirstApp").setMaster("local")
sc = SparkContext(conf=conf)
textFile = sc.textFile("hdfs://inputFiles/CountOfMonteCristo/BookText.txt")
textFile.first()
L'erreur que j'obtiens est:
Py4JJavaError: An error occurred while calling o64.partitions.
: Java.lang.IllegalArgumentException: Java.net.UnknownHostException: inputFiles
Est-ce parce que je ne configure pas correctement mon sparkContext? J'exécute cela dans une machine virtuelle ubuntu 14.04 via une boîte virtuelle.
Je ne sais pas ce que je fais mal ici ...
Vous pouvez accéder aux fichiers HDFS via le chemin d'accès complet si aucune configuration n'est fournie (namenodehost est votre hôte local si hdfs est situé dans l'environnement local).
hdfs://namenodehost/inputFiles/CountOfMonteCristo/BookText.txt
Étant donné que vous ne fournissez pas d'autorité, l'URI devrait ressembler à ceci:
hdfs:///inputFiles/CountOfMonteCristo/BookText.txt
sinon inputFiles
est interprété comme un nom d'hôte. Avec une configuration correcte, vous ne devriez pas du tout avoir besoin d'un schéma:
/inputFiles/CountOfMonteCristo/BookText.txt
au lieu.
Il existe deux façons générales de lire des fichiers dans Spark, une pour les fichiers très distribués pour les traiter en parallèle, une pour lire les petits fichiers comme les tables de recherche et la configuration sur HDFS. Pour ce dernier, vous souhaiterez peut-être lire un fichier dans le nœud du pilote ou les travailleurs en une seule lecture (pas une lecture distribuée). Dans ce cas, vous devez utiliser le module SparkFiles
comme ci-dessous.
# spark is a SparkSession instance
from pyspark import SparkFiles
spark.sparkContext.addFile('hdfs:///user/bekce/myfile.json')
with open(SparkFiles.get('myfile.json'), 'rb') as handle:
j = json.load(handle)
or_do_whatever_with(handle)
Tout d'abord, vous devez exécuter
export PYSPARK_PYTHON=python3.4 #what so ever is your python version
code
from pyspark.sql import SparkSession
from pyspark import SparkConf, SparkContext
spark = SparkSession.builder.appName("HDFS").getOrCreate()
sparkcont = SparkContext.getOrCreate(SparkConf().setAppName("HDFS"))
logs = sparkcont.setLogLevel("ERROR")
data = [('First', 1), ('Second', 2), ('Third', 3), ('Fourth', 4), ('Fifth', 5)]
df = spark.createDataFrame(data)
df.write.csv("hdfs:///mnt/data/")
print("Data Written")
Pour exécuter le code
spark-submit --master yarn --deploy-mode client <py file>