Ошибка при преобразовании кадра данных pandas в спарк Dataframe

1

Мой панда DataFrame

df4.head()
                     features
 0          [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, ...
 1          [0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, ...

Каждая ячейка представляет собой список python.

mySchema=StructType([StructField("features",ArrayType(IntegerType()),True)])
sdf2=sqlCtx.createDataFrame(df4,schema=mySchema)

При создании spark Dataframe sdf2 я получаю следующую ошибку. Я пробовал с разными типами данных, но тщетно.

Error: element in array field features: IntegerType can not accept object 0 in type <class 'numpy.int64'>

Я хочу запустить BucketedRandomProjectionLSH в Pysark, который принимает один столбец с вектором данных.

Теги:
pandas
apache-spark
pyspark

1 ответ

0

Это потому, что у вас есть объекты numpy.int64 внутри ваших массивов.

Спарк не соглашается с этим.

df = pd.DataFrame([
    (np.array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]),),
    (np.array([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]),),
], columns = ['features'])

type(df.iloc[0]['features'][0])
> numpy.int64

df = pd.DataFrame([
    ([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],),
    ([0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],),
], columns = ['features'])

type(df.iloc[0]['features'][0])
> int

Вместо этого попробуйте использовать list Python.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню