CSV dosya içeriklerini pyspark veri çerçevelerine aktarın


13

Bir .csv dosyasını pyspark veri çerçevelerine nasıl alabilirim? Hatta Pandas csv dosyasını okumaya ve daha sonra createDataFrame kullanarak bir kıvılcım dataframe dönüştürmek çalıştı, ama yine de bazı hata gösteriyor. Birisi bana bu konuda rehberlik edebilir mi? Ayrıca, lütfen bana bir xlsx dosyasını nasıl alabilirim? Panda veri çerçeveleri içine csv içeriği almak ve sonra kıvılcım veri çerçeveleri dönüştürmek çalışıyorum, ama hata gösteriyor:

"Py4JJavaError" An error occurred while calling o28.applySchemaToPythonRDD. : java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient 

Kodum:

from pyspark import SparkContext 
from pyspark.sql import SQLContext 
import pandas as pd 
sqlc=SQLContext(sc) 
df=pd.read_csv(r'D:\BestBuy\train.csv') 
sdf=sqlc.createDataFrame(df) 

1
Bir hata mesajınız varsa, bunu göndermelisiniz; büyük olasılıkla durumun hata ayıklamasına yardımcı olacak önemli bilgilere sahiptir.
jagartner

Panda veri çerçeveleri içine csv içeriğini almaya çalışıyorum ve sonra kıvılcım veri çerçeveleri dönüştürmek .... ama "Py4JJavaError" gibi bir şey hata gösteriyor O28.applySchemaToPythonRDD çağrılırken bir hata oluştu. : java.lang.RuntimeException: java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
neha

ve kodum - pyspark ithalatından pyspark.sql'den SparkContext'ten içe aktar SQLContext içe aktarma pandalarını pd sqlc = SQLContext (sc) df = pd.read_csv (r'D: \ BestBuy \ train.csv ') sdf = sqlc.createDataFrame (df) ----> Hata
neha

1
DataScience.SE'ye Hoşgeldiniz! Lütfen yorum eklemek yerine orijinal yayınınızı düzenleyin.
Emre

dosya yolu HDFS olmalıdır, o zaman sadece u veri çalıştırabilirsiniz
Prakash Reddy

Yanıtlar:


13

"Bir .csv dosyasını pyspark veri çerçevelerine nasıl aktarabilirim?" - bunu yapmanın birçok yolu vardır; en basit olanı, Databrick'in spark-csv modülü ile pyspark başlatmak olacaktır. Bunu pyspark ile başlatarak yapabilirsiniz.

pyspark --packages com.databricks:spark-csv_2.10:1.4.0

aşağıdaki adımları uygulayabilirsiniz:

from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)

df = sqlContext.read.format('com.databricks.spark.csv').options(header='true', inferschema='true').load('cars.csv')

Diğer yöntem, metin dosyasında rdd olarak okunmasıdır.

myrdd = sc.textFile("yourfile.csv").map(lambda line: line.split(","))

Ardından, verilerinizi her öğe şema için doğru biçimde olacak şekilde dönüştürün (örn. Ints, Dizeler, Floats, vb.). Daha sonra kullanmak isteyeceksiniz

>>> from pyspark.sql import Row
>>> Person = Row('name', 'age')
>>> person = rdd.map(lambda r: Person(*r))
>>> df2 = sqlContext.createDataFrame(person)
>>> df2.collect()
[Row(name=u'Alice', age=1)]
>>> from pyspark.sql.types import *
>>> schema = StructType([
...    StructField("name", StringType(), True),
...    StructField("age", IntegerType(), True)])
>>> df3 = sqlContext.createDataFrame(rdd, schema)
>>> df3.collect()
[Row(name=u'Alice', age=1)]

Referans: http://spark.apache.org/docs/1.6.1/api/python/pyspark.sql.html#pyspark.sql.Row

"Ayrıca, lütfen bana xlsx dosyasını nasıl alabilirim?" - Excel dosyaları "Büyük Veri" de kullanılmaz; Kıvılcım büyük dosyalar veya veritabanlarıyla kullanılmak içindir. 50 GB boyutunda bir Excel dosyanız varsa, yanlış şeyler yapıyorsunuz demektir. Excel bu boyuttaki bir dosyayı bile açamaz; deneyimlerimden 20MB ve Excel'in üzerindeki her şey ölüyor.


Yukarıdaki RDD yaklaşımı ile ilgili bir sorun olabileceğini düşünüyorum: alanlar (çift tırnak içine alınmış olsa da) yeni satırlar içerebilir, viz., Tools.ietf.org/html/rfc4180#section-2 .
flow2k

xlsx dosyasını csv'ye (gnumeric veya open office apis gibi şeyler) dönüştürmek için araçlar kullanabilirsiniz. veri bilimini normal şekilde yapabilirsiniz
vpathak

2

Aşağıdaki benim için iyi çalıştı:

from pyspark.sql.types import *
schema = StructType([StructField("name", StringType(), True),StructField("age", StringType(), True)]
pd_df = pd.read_csv("<inputcsvfile>")
sp_df = spark.createDataFrame(pd_df, schema=schema)

1

Yerel dizinimde bir 'temp.csv' dosyası var. Oradan, yerel bir örnek kullanarak aşağıdakileri yaparım:

>>> from pyspark import SQLContext
>>> from pyspark.sql import Row
>>> sql_c = SQLContext(sc)
>>> d0 = sc.textFile('./temp.csv')
>>> d0.collect()
[u'a,1,.2390', u'b,2,.4390', u'c,3,.2323']
>>> d1 = d0.map(lambda x: x.split(',')).map(lambda x: Row(label = x[0], number = int(x[1]), value = float(x[2])))
>>> d1.take(1)
[Row(label=u'a', number=1, value=0.239)]
>>> df = sql_c.createDataFrame(d1)
>>> df_cut = df[df.number>1]
>>> df_cut.select('label', 'value').collect()
[Row(label=u'b', value=0.439), Row(label=u'c', value=0.2323)]

Yani d0, bir kıvılcım RDD'ye gönderdiğimiz ham metin dosyasıdır. Bir veri çerçevesi oluşturmak için, csv'yi parçalamak ve d1 oluştururken yaptığım gibi her girişi bir Satır türü yapmak istiyorsunuz. Son adım, veri çerçevesini RDD'den yapmaktır.


0

Başlığa dikkat etmek, kaçış karakterlerini kullanmak, otomatik şema çıkarımını yapmak vb. Gibi otomatik olarak sizin için çok şey yapan DataBricks tarafından üretilen spark-csv paketini kullanabilirsiniz. Spark 2.0'dan başlayarak CSV'lerle başa çıkmak için dahili bir fonksiyon var.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.