CSV 파일 내용을 pyspark 데이터 프레임으로 가져 오기


13

.csv 파일을 pyspark 데이터 프레임으로 가져 오려면 어떻게합니까? 팬더에서 CSV 파일을 읽은 다음 createDataFrame을 사용하여 스파크 데이터 프레임으로 변환하려고 시도했지만 여전히 오류가 표시됩니다. 누군가 이것을 통해 나를 안내 할 수 있습니까? 또한 xlsx 파일을 가져 오는 방법을 알려주십시오. CSV 콘텐츠를 팬더 데이터 프레임으로 가져온 다음 스파크 데이터 프레임으로 변환하려고하지만 오류가 표시됩니다.

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

내 코드는 다음과 같습니다

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
오류 메시지가 있으면 게시해야합니다. 상황을 디버깅하는 데 도움이되는 중요한 정보가 있습니다.
jagartner

csv 내용을 팬더 데이터 프레임으로 가져오고 스파크 데이터 프레임으로 변환하려고합니다 ....하지만 "Py4JJavaError"와 같은 오류가 표시됩니다 o28.applySchemaToPythonRDD를 호출하는 동안 오류가 발생했습니다. : java.lang.RuntimeException : java.lang.RuntimeException : org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient를 인스턴스화 할 수 없음
neha

그리고 내 코드는-> pyspark import의 SparkContext pyspark.sql에서 SparkContext 가져 오기 SQLContext import pandas를 pd로 sqlc = SQLContext (sc) df = pd.read_csv (r'D : \ BestBuy \ train.csv ') sdf = sqlc.createDataFrame (df) ----> 오류
neha

1
DataScience.SE에 오신 것을 환영합니다! 의견을 추가하는 대신 원본 게시물을 수정하십시오.
Emre

파일 경로는 HDFS에 있어야하며 오직 u만이 데이터를 실행할 수 있습니다
Prakash Reddy

답변:


13

".csv 파일을 pyspark 데이터 프레임으로 가져 오려면 어떻게해야합니까?" -이를 수행하는 방법은 여러 가지가 있습니다. 가장 간단한 방법은 Databrick의 spark-csv 모듈로 pyspark를 시작하는 것입니다. pyspark를 시작 하여이 작업을 수행 할 수 있습니다

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

다음 단계를 수행 할 수 있습니다.

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

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

다른 방법은 텍스트 파일에서 다음을 사용하여 rdd로 읽는 것입니다.

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

그런 다음 모든 항목이 스키마에 맞는 형식 (예 : Int, Strings, Floats)이되도록 데이터를 변환하십시오. 그런 다음 사용하고 싶을 것입니다

>>> 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)]

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

"또한 xlsx 파일을 어떻게 가져올 수 있는지 알려주십시오." -Excel 파일은 "빅 데이터"에서 사용되지 않습니다. Spark는 큰 파일이나 데이터베이스와 함께 사용됩니다. 크기가 50GB 인 Excel 파일이 있으면 문제가있는 것입니다. Excel은 그 크기의 파일을 열 수도 없습니다. 내 경험으로는 20MB 이상이면 Excel이 죽습니다.


위의 RDD 접근 방식에 문제가 있다고 생각합니다. 필드에는 줄 바꿈 (큰 따옴표로 묶여 있음), 즉 tools.ietf.org/html/rfc4180#section-2가 포함될 수 있습니다.
flow2k 2016 년

도구를 사용하여 xlsx 파일을 csv (gnumeric 또는 open office apis 등)로 변환 할 수 있습니다. 그런 다음 데이터 과학을 정상적으로 수행 할 수 있습니다
vpathak

2

다음은 나를 위해 잘 작동했습니다.

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

로컬 디렉토리에 'temp.csv'파일이 있습니다. 거기에서 로컬 인스턴스를 사용하여 다음을 수행합니다.

>>> 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)]

따라서 d0은 스파크 RDD로 보내는 원시 텍스트 파일입니다. 데이터 프레임을 만들려면 d1을 만들 때와 같이 csv를 분리하고 모든 항목을 행 유형으로 만들고 싶습니다. 마지막 단계는 RDD에서 데이터 프레임을 만드는 것입니다.


0

헤더 관리, 이스케이프 문자 사용, 자동 스키마 유추 등의 많은 작업을 자동으로 수행하는 DataBricks의 spark-csv 패키지를 사용할 수 있습니다 . Spark 2.0부터는 CSV 처리를위한 기능이 내장되어 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.