Імпортуйте вміст файлу CSV у фрейми даних pyspark


13

Як я можу імпортувати .csv файл у фрейми даних pyspark? Я навіть спробував прочитати файл csv в Pandas, а потім перетворив його в іскровий фреймворк за допомогою 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

і мій код був -> від імпорту pyspark SparkContext від pyspark.sql імпорту SQLContext імпортує панди як pd sqlc = SQLContext (sc) df = pd.read_csv (r'D: \ BestBuy \ train.csv ') sdf = sqlc.createDataFrame (df) ----> Помилка
1616

1
Ласкаво просимо до DataScience.SE! Відредагуйте оригінальну публікацію замість додавання коментарів.
Емре

Шлях до файлу повинен бути у форматі HDFS, тоді лише ти можеш запускати дані
Пракаш Редді

Відповіді:


13

"Як я можу імпортувати .csv файл у фрейми даних pyspark?" - існує багато способів зробити це; найпростішим було б запустити pyspark за допомогою модуля spark-csv Databrick. Це можна зробити, запустивши 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(","))

Потім трансформуйте ваші дані таким чином, щоб кожен елемент був у правильному форматі для схеми (тобто Інти, Струни, Поплавці тощо). Ви захочете потім скористатися

>>> 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 не використовуються у "Big Data"; Іскра призначена для використання з великими файлами або базами даних. Якщо у вас є файл Excel розміром 50 Гб, ви робите не так. Excel навіть не зможе відкрити файл такого розміру; з мого досвіду, все, що перевищує 20 Мб, і Excel гине.


Я думаю, що може бути проблема з підходом до RDD вище: поля можуть містити нові рядки (хоча й оточені подвійними лапками), а саме, tools.ietf.org/html/rfc4180#section-2 .
flow2k

ви можете використовувати інструменти для перетворення файлу 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 іскри. Для того, щоб ви створили кадр даних, ви хочете розбити csv і зробити кожен запис типу рядка, як я роблю при створенні d1. Останній крок - зробити кадр даних з RDD.


0

Ви можете використовувати пакет spark -csv від DataBricks, який робить багато речей для вас автоматично, наприклад, дбаючи про заголовок, використовуйте символи втечі, автоматичну схему, яка визначає і т.д. Починаючи з Spark 2.0 є вбудована функція для роботи з CSV.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.