Bien qu'il existe diverses sources de données, il semble que l'obstacle soit faible pour mettre le fichier tel quel dans le stockage à la hâte. S'il s'agit d'une prémisse de Big Data comme Spark, les fichiers journaux, etc. sont souvent supposés, mais comme les données commerciales générales ne peuvent pas être évitées, d'abord CSV, donc quand j'ai essayé un peu autour du CSV Remarque. (Chez IBM Data Scientist Experience, Python 2 avec Spark 2.0)
Téléchargez le fichier CSV dans IBM Object Storage basé sur Swift. Utilisez «Déposez votre fichier ici ou parcourez vos fichiers pour ajouter un nouveau fichier» sur le côté droit de l'écran. J'ai téléchargé baseball.csv, cars.csv, whisky.csv comme indiqué sur la capture d'écran.
J'ai d'abord essayé avec le code inséré à partir du code DSX
Il existe un processus pour définir la configuration et un processus pour charger les données CSV dans DataFrame. (1) Définir la configuration Hadoop à partir de Spark Les paramètres de configuration décrits dans Accès à OpenStack Swift à partir de Spark sont définis en fonction du fichier téléchargé sur IBM Object Storage. Il paraît que
test.py
# @hidden_cell
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
# This function accesses a file in your Object Storage. The definition contains your credentials.
# You might want to remove those credentials before you share (name):
def set_hadoop_config_with_credentials_xxxxxxxxxxxxxxxxxxcxxxxxcc(name):
"""This function sets the Hadoop configuration so it is possible to
access data from Bluemix Object Storage V3 using Spark"""
prefix = 'fs.swift.service.' + name
hconf = sc._jsc.hadoopConfiguration()
hconf.set(prefix + '.auth.url', 'https://identity.open.softlayer.com'+'/v3/auth/tokens')
hconf.set(prefix + '.auth.endpoint.prefix', 'endpoints')
hconf.set(prefix + '.tenant', '4dbbbca3a8ec42eea9349120fb91dcf9')
hconf.set(prefix + '.username', 'xxxxxxxxxcxxxxxxcccxxxxxccc')
hconf.set(prefix + '.password', 'Xxxxxxxxxxxxxxxxx')
hconf.setInt(prefix + '.http.port', 8080)
hconf.set(prefix + '.region', 'dallas')
hconf.setBoolean(prefix + '.public', True)
# you can choose any name
name = 'keystone'
set_hadoop_config_with_credentials_Xxxxxxxxxxxxxxxxxxcxxxxxc(name)
(2) Charger les données CSV dans la trame de données Spark
test.py
df_data_1=sqlContext.read.format('com.databricks.spark.csv')\
.options(header='true',inferschema='true')\
.load("swift://PredictiveAnalyticsProject2." + name + "/whiskey.csv")
Cela semble utiliser un package appelé spark-csv qui était nécessaire avant Spark 2.0. Depuis spark2.0, Spark DataFrame semble être capable de gérer directement csv, et read.csv () peut également être utilisé, ce qui est pratique.
Le contenu du Spark DataFrame qui chargeait whisky.csv a été exporté vers Object Storage avec le nom whiskey_new.csv. (1) J'ai essayé de sortir avec l'écriture de Spark Data Frame Écrivez simplement write.csv () et c'est OK.
En ce qui concerne le mode, il semble que le mode Save tel qu'illustré dans here puisse être utilisé. En regardant le fichier de sortie, il a été divisé en plusieurs fichiers et en sortie au lieu d'un CSV, comme indiqué dans la capture d'écran ci-dessous. Je pense que c'est parce qu'il est traité par plusieurs nœuds. (C'est étrange? Quand vous relisez ceci depuis Spark avec read.csv, il est traité comme un textFile, csv, donc il ne semble y avoir aucun problème). Cependant, il semble qu'il y ait des personnes autres que moi qui veulent sortir dans un fichier, et il y avait aussi un Q & R demandant si cela pouvait être sorti dans un fichier (http://stackoverflow.com/questions/31674530/write-single-). csv-file-using-spark-csv)
(2) J'ai essayé l'API REST sans utiliser Spark Je ne pense pas qu'il soit adapté pour gérer une grande quantité de données, mais vous pouvez le mettre en tant que CSV sur Object Storage avec le code suivant. (La partie get du code que DSX insère pour créer Pandas DataFrame est juste modifiée pour put. Placez la destination / url2 pour le téléchargement à partir de la réponse tout en recevant les informations d'authentification par le premier appel d'API / POST Semble assembler)
put_sample.py
def put_object_storage_file_with_credentials_xxxxxxxxxx(container, filename, indata):
url1 = ''.join(['https://identity.open.softlayer.com', '/v3/auth/tokens'])
data = {'auth': {'identity': {'methods': ['password'],
'password': {'user': {'name': 'member_1825cd3bc875420fc629ccfd22c22e20433a7ac9','domain': {'id': '07e33cca1abe47d293b86de49f1aa8bc'},
'password': 'xxxxxxxxxx'}}}}}
headers1 = {'Content-Type': 'application/json'}
resp1 = requests.post(url=url1, data=json.dumps(data), headers=headers1)
resp1_body = resp1.json()
for e1 in resp1_body['token']['catalog']:
if(e1['type']=='object-store'):
for e2 in e1['endpoints']:
if(e2['interface']=='public'and e2['region']=='dallas'):
url2 = ''.join([e2['url'],'/', container, '/', filename])
s_subject_token = resp1.headers['x-subject-token']
headers2 = {'X-Auth-Token': s_subject_token, 'accept': 'application/json'}
resp2 = requests.put(url=url2, headers=headers2 , data=indata)
print resp2
return (resp2.content)
put_object_storage_file_with_credentials_xxxxxxxxxx( 'PredictiveAnalyticsProject2', 'whiskey_new_s.csv' , df_data_2.to_csv( index = False ) )
Il semble y avoir un moyen d'utiliser swiftclient de Python comme image à mettre avec l'API REST ci-dessus, mais cela ne semble pas fonctionner dans l'environnement d'IBM Data Scientist Experience. Using IBM Object Storage in Bluemix, with Python
Recommended Posts