2016-05-29 30 views
5

Tôi đang cố chuyển đổi Pandas DF thành Spark one. DF đầu:Chuyển đổi khung dữ liệu Pandas thành lỗi dữ liệu của Spark

10000001,1,0,1,12:35,OK,10002,1,0,9,f,NA,24,24,0,3,9,0,0,1,1,0,0,4,543 
10000001,2,0,1,12:36,OK,10002,1,0,9,f,NA,24,24,0,3,9,2,1,1,3,1,3,2,611 
10000002,1,0,4,12:19,PA,10003,1,1,7,f,NA,74,74,0,2,15,2,0,2,3,1,2,2,691 

Code:

dataset = pd.read_csv("data/AS/test_v2.csv") 
    sc = SparkContext(conf=conf) 
    sqlCtx = SQLContext(sc) 
    sdf = sqlCtx.createDataFrame(dataset) 

Và tôi đã nhận ra lỗi:

TypeError: Can not merge type <class 'pyspark.sql.types.StringType'> and <class 'pyspark.sql.types.DoubleType'> 
+2

Giả định đầu tiên của tôi là tệp chứa cả số và chuỗi trong một cột và Spark gây nhầm lẫn trên đó. Tuy nhiên, nó sẽ được xử lý bởi Pandas khi nhập khẩu. –

+0

DF của bạn có tên cột không? – MaxU

+0

Có. Tôi có nên tắt chúng không? –

Trả lời

9

Bạn cần phải thực hiện chắc chắn các cột dữ liệu pandas của bạn thích hợp cho loại tia lửa được suy ra. Nếu dataframe gấu trúc của bạn sẽ liệt kê một cái gì đó như:

pd.info() 
<class 'pandas.core.frame.DataFrame'> 
RangeIndex: 5062 entries, 0 to 5061 
Data columns (total 51 columns): 
SomeCol     5062 non-null object 
Col2      5062 non-null object 

Và bạn đang nhận được rằng lỗi try:

df[['SomeCol', 'Col2']] = df[['SomeCol', 'Col2']].astype(str) 

Bây giờ, hãy chắc chắn .astype(str) thực sự là loại mà bạn muốn các cột được. Về cơ bản, khi mã Java nằm dưới cố gắng suy ra kiểu từ một đối tượng trong python, nó sử dụng một số quan sát và đoán, nếu đoán đó không áp dụng cho tất cả dữ liệu trong cột, nó đang cố chuyển đổi từ gấu trúc sang nó sẽ thất bại.

+0

Tôi thấy điều này rất hữu ích. Câu hỏi tiếp theo: Khi tôi đi qua và làm theo các bước này cho khung dữ liệu của riêng tôi, tôi không thấy bất kỳ thay đổi nào đối với pd.info(). Làm thế nào chính xác là dataframe chính nó thay đổi? Làm thế nào tôi có thể kiểm tra xem các DataFrame gấu trúc đã thay đổi sau khi sử dụng .astype (str)? – EntryLevelR

2

Tôi đã thử điều này với dữ liệu của bạn và nó đang làm việc:

%pyspark 
import pandas as pd 
from pyspark.sql import SQLContext 
print sc 
df = pd.read_csv("test.csv") 
print type(df) 
print df 
sqlCtx = SQLContext(sc) 
sqlCtx.createDataFrame(df).show() 
Các vấn đề liên quan