อิมพอร์ตเนื้อหาไฟล์ csv ไปยัง pyspark dataframes


13

ฉันจะนำเข้าไฟล์. csv ไปยัง pyspark dataframes ได้อย่างไร ฉันพยายามอ่านไฟล์ csv ใน Pandas แล้วแปลงเป็น spark dataframe โดยใช้ createDataFrame แต่ก็ยังแสดงข้อผิดพลาดอยู่ ใครสามารถแนะนำฉันผ่านสิ่งนี้? นอกจากนี้โปรดบอกฉันว่าฉันจะนำเข้าไฟล์ xlsx ได้อย่างไร ฉันกำลังพยายามที่จะนำเข้าเนื้อหา csv ลงในดาต้าดาต้าของ pandas จากนั้นแปลงเป็นเฟรมข้อมูลประกายไฟ แต่มันแสดงข้อผิดพลาด:

"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 ไปยัง pafas dataframes แล้วแปลงเป็นเฟรมข้อมูลประกายไฟ .... แต่มันแสดงข้อผิดพลาดบางอย่างเช่น "Py4JJavaError" เกิดข้อผิดพลาดขณะเรียก o28.applySchemaToPythonRDD : java.lang.RuntimeException: java.lang.RuntimeException: ไม่สามารถยกตัวอย่าง org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
neha

และรหัสของฉันคือ -> จากการนำเข้า pyspark SparkContext จาก pyspark.sql นำเข้า SQLContext pandas นำเข้าเป็น pd sqlc = SQLContext (sc) df = pd.read_csv (r'D: \ BestBuy \ train.csv ') sdf = sqlc.createDataFrame (df) ----> ข้อผิดพลาด
neha

1
ยินดีต้อนรับสู่ DataScience.SE! โปรดแก้ไขโพสต์ดั้งเดิมของคุณแทนการเพิ่มความคิดเห็น
Emre

เส้นทางไฟล์จะต้องอยู่ใน HDFS แล้วมีเพียงคุณเท่านั้นที่สามารถเรียกใช้ข้อมูลได้
Prakash Reddy

คำตอบ:


13

"ฉันจะนำเข้าไฟล์. csv ไปยัง pyspark dataframes ได้อย่างไร" - มีหลายวิธีในการทำเช่นนี้ วิธีที่ง่ายที่สุดคือเริ่มต้น 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(","))

จากนั้นแปลงข้อมูลของคุณเพื่อให้ทุกรายการอยู่ในรูปแบบที่ถูกต้องสำหรับสคีมา (เช่น Ints, 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 ไม่ได้ใช้ใน "Big Data"; Spark มีไว้เพื่อใช้กับไฟล์หรือฐานข้อมูลขนาดใหญ่ หากคุณมีไฟล์ Excel ที่มีขนาด 50GB แสดงว่าคุณทำสิ่งผิดปกติ Excel จะไม่สามารถเปิดไฟล์ขนาดนั้นได้ จากประสบการณ์ของฉันมีอะไรเกิน 20MB และ 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 เป็นไฟล์ข้อความดิบที่เราส่งไปยัง spark RDD เพื่อให้คุณสร้าง data frame คุณต้องการแยก csv ออกจากกันและทำให้ทุก ๆ รายการเป็นประเภท Row เหมือนที่ฉันทำเมื่อสร้าง d1 ขั้นตอนสุดท้ายคือการสร้าง data frame จาก RDD


0

คุณสามารถใช้แพคเกจspark-csvโดย DataBricks ที่ทำสิ่งต่างๆมากมายให้คุณโดยอัตโนมัติเช่นการดูแลส่วนหัว, ใช้ตัวอักษร escape, schema อัตโนมัติอนุมานเป็นต้น เริ่มจาก Spark 2.0 มีฟังก์ชั่น inbuilt สำหรับจัดการกับ CSV

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.