2016-05-29 3 views
5

Я пытаюсь преобразовать Pandas DF в Spark. DF голова:Преобразование данных в Pandas в ошибку Spark dataframe

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 

Код:

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

И я получил ошибку:

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

Мое первое предположение состоит в том, что файл содержит как числа, так и строки в одном столбце, а Spark смущает его. Однако при импорте он должен обрабатываться Pandas. –

+0

У вашего DF есть имена столбцов? – MaxU

+0

Да, это так. Должен ли я отключить их? –

ответ

9

Вам необходимо сделать убедитесь, что ваши столбцы данных pandas подходят для типа искры. Если панды dataframe перечисляет что-то вроде:

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 

И вы получаете эту попытку ошибки:

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

Теперь убедитесь, что на самом деле .astype(str) типа вы хотите, чтобы эти колонки были. В основном, когда базовый код Java пытается вывести тип из объекта в python, он использует некоторые наблюдения и делает предположение, если это предположение не распространяется на все данные в столбце (столбцах), оно пытается преобразовать из pandas в искра не сработает.

+0

Я нашел это очень полезным. Последующий вопрос: когда я прошел и выполнил эти шаги для своего собственного фрейма данных, я не увидел никаких изменений в pd.info(). Как именно изменяется сама кадр данных? Как я могу проверить, чтобы изменения pandas DataFrame изменились после использования .astype (str)? – EntryLevelR

2

Я попытался это с вашими данными, и она работает:

%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() 
Смежные вопросы