Nhập nội dung tệp csv vào các tệp dữ liệu pyspark


12

Làm cách nào tôi có thể nhập tệp .csv vào tệp dữ liệu pyspark? Tôi thậm chí đã cố gắng đọc tệp csv trong Pandas và sau đó chuyển đổi nó thành một cơ sở dữ liệu tia lửa bằng cách sử dụng createDataFrame, nhưng nó vẫn hiển thị một số lỗi. Ai đó có thể hướng dẫn tôi thông qua điều này? Ngoài ra, vui lòng cho tôi biết làm thế nào tôi có thể nhập tệp xlsx? Tôi đang cố gắng nhập nội dung csv vào các tệp dữ liệu gấu trúc và sau đó chuyển đổi nó thành các khung dữ liệu tia lửa, nhưng nó đang hiển thị lỗi:

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

Mã của tôi là:

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
Nếu bạn có một thông báo lỗi, bạn nên đăng nó; nó rất có thể có thông tin quan trọng trong việc giúp gỡ lỗi tình huống.
jagartner

Tôi đang cố gắng nhập nội dung csv vào các tệp dữ liệu của gấu trúc và sau đó chuyển đổi nó thành các khung dữ liệu tia lửa .... nhưng nó đang hiển thị lỗi như "Py4JJavaError" Đã xảy ra lỗi khi gọi o28.applySchemaToPythonRDD. : java.lang.R nbException: java.lang.R nbException: Không thể khởi tạo org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
neha

và mã của tôi là -> từ pyspark nhập SparkContext từ pyspark.sql nhập SQLContext nhập gấu trúc dưới dạng pd sqlc = SQLContext (sc) df = pd.read_csv (r'D: \ BestBuy \ train.csv ') sdf = sqlc.c (df) ----> Lỗi
neha

1
Chào mừng bạn đến với DataScience.SE! Vui lòng chỉnh sửa bài viết gốc của bạn thay vì thêm ý kiến.
Emre

đường dẫn tệp phải ở HDFS thì chỉ bạn mới có thể chạy dữ liệu
Prakash Reddy

Câu trả lời:


13

"Làm cách nào tôi có thể nhập tệp .csv vào các tệp dữ liệu pyspark?" -- Có rất nhiều cách để làm điều này; đơn giản nhất là khởi động pyspark với mô-đun spark-csv của Databrick. Bạn có thể làm điều này bằng cách bắt đầu pyspark với

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

sau đó bạn có thể làm theo các bước sau:

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

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

Phương pháp khác là đọc tệp văn bản dưới dạng rdd bằng

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

Sau đó chuyển đổi dữ liệu của bạn để mọi mục có định dạng chính xác cho lược đồ (ví dụ: Ints, String, Floats, v.v.). Bạn sẽ muốn sau đó sử dụng

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

Tham khảo: http://spark.apache.org/docs/1.6.1/api/python/pyspark.sql.html#pyspark.sql.Row

"Ngoài ra, vui lòng cho tôi biết làm thế nào tôi có thể nhập tệp xlsx?" - Các tệp Excel không được sử dụng trong "Dữ liệu lớn"; Spark có nghĩa là được sử dụng với các tệp lớn hoặc cơ sở dữ liệu. Nếu bạn có tệp Excel có kích thước 50 GB, thì bạn đã làm sai. Excel thậm chí sẽ không thể mở một tệp có kích thước đó; từ kinh nghiệm của tôi, bất cứ thứ gì trên 20MB và Excel đều chết.


Tôi nghĩ rằng có thể có một vấn đề với cách tiếp cận RDD ở trên: các trường có thể chứa các dòng mới (mặc dù được bao quanh bởi dấu ngoặc kép), viz., Tools.ietf.org/html/rfc4180#section-2 .
Flow2k

bạn có thể sử dụng các công cụ để chuyển đổi tệp xlsx sang csv (những thứ như gnumeric hoặc apis mở văn phòng). sau đó bạn có thể làm khoa học dữ liệu như bình thường
vpathak

2

Sau đây làm việc tốt cho tôi:

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

Tôi có trong thư mục địa phương của mình một tập tin 'temp.csv'. Từ đó, sử dụng một thể hiện cục bộ tôi làm như sau:

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

Vì vậy, d0 là tệp văn bản thô mà chúng tôi gửi tới tia lửa RDD. Để bạn tạo khung dữ liệu, bạn muốn tách csv ra và biến mọi mục nhập thành kiểu Hàng, như tôi làm khi tạo d1. Bước cuối cùng là tạo khung dữ liệu từ RDD.


0

Bạn có thể sử dụng gói spark-csv của DataBricks để tự động thực hiện nhiều việc cho bạn, như chăm sóc tiêu đề, sử dụng các ký tự thoát, lược đồ tự động suy ra vân vân. Bắt đầu từ Spark 2.0, có một chức năng sẵn có để xử lý CSV.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.