randomSplit возвращает фрейм данных со всеми нулевыми значениями в pyspark

#python #apache-spark #pyspark #apache-spark-sql

#python #apache-spark #pyspark #apache-spark-sql

Вопрос:

Я пытаюсь разделить свои данные на обучающий и тестовый наборы, но он не работает должным образом, потому что он возвращает datasets со всеми нулевыми значениями. Как мне это исправить?

Примечание * В моих данных намного больше выборок, но я включил только первые четыре для наглядности.

 import pandas as pd
from pyspark.sql import SQLContext
from pyspark import SparkContext
from pyspark.ml.linalg import Vectors
from pyspark.ml.feature import VectorAssembler
from pyspark.sql import SparkSession
from pyspark.sql.types import *
data = pd.read_csv('path')
header=data.columns.tolist()
fn=header[:data.shape[1]-1]
assembler = VectorAssembler(inputCols=fn,outputCol="features")
spDF = sql.createDataFrame(data)
spDF.show()
  

Вывод:

  --- --- --- ---- --- --- ------ ---- --- --- ---- 
|  a|  b|  c|   d|  e|  f|     g|   h|  i|  j|Type|
 --- --- --- ---- --- --- ------ ---- --- --- ---- 
|  7|  0|  2| 700|  9| 10|  1153| 832|  9|  2|   1|
| 17|  7|  4|1230| 17| 19|  1265|1230| 17|  0|   0|
|  0|  0|  0|   0|  0|  0|     0|   0|  0|  0|   0|
| 31| 22|  3|3812| 39| 37| 18784|4380| 39|  8|   0|
 --- --- --- ---- --- --- ------ ---- --- --- ---- 

spDF = assembler.transform(spDF)
spDF.show()
  

Вывод:

  --- --- --- ---- --- --- ------ ---- --- --- ---- -------------------- 
|  a|  b|  c|   d|  e|  f|     g|   h|  i|  j|Type|            features|
 --- --- --- ---- --- --- ------ ---- --- --- ---- -------------------- 
|  7|  0|  2| 700|  9| 10|  1153| 832|  9|  2|   1|[7.0,0.0,2.0,700....|
| 17|  7|  4|1230| 17| 19|  1265|1230| 17|  0|   0|[17.0,7.0,4.0,123...|
|  0|  0|  0|   0|  0|  0|     0|   0|  0|  0|   0|          (10,[],[])|
| 31| 22|  3|3812| 39| 37| 18784|4380| 39|  8|   0|[31.0,22.0,3.0,38...|
 --- --- --- ---- --- --- ------ ---- --- --- ---- -------------------- 
(train_data, test_data) = spDF.randomSplit([0.8,0.2])
train_data.show()
  

Вывод:

  --- --- --- --- --- --- --- --- --- --- ---- ---------- 
|  a|  b|  c|  d|  e|  f|  g|  h|  i|  j|Type|  features|
 --- --- --- --- --- --- --- --- --- --- ---- ---------- 
|  0|  0|  0|  0|  0|  0|  0|  0|  0|  0|   0|(10,[],[])|
|  0|  0|  0|  0|  0|  0|  0|  0|  0|  0|   0|(10,[],[])|
|  0|  0|  0|  0|  0|  0|  0|  0|  0|  0|   0|(10,[],[])|
|  0|  0|  0|  0|  0|  0|  0|  0|  0|  0|   0|(10,[],[])|
 --- --- --- --- --- --- --- --- --- --- ---- ---------- 
  

Я хочу передать эти обучающие данные, чтобы они соответствовали модели машинного обучения.

Комментарии:

1. попробуйте добавить к нему seed значение и посмотрите, получите ли вы ненулевые значения в наборе. Перейдите по ссылке для справки -> spark.apache.org/docs/2.1.3/api/python /…

2. Вопрос на самом деле не имеет ничего общего с machne-learning — пожалуйста, не спамите нерелевантные теги (удалены и заменены на apache-spark-sql ).

3. очень вероятно, что внутренняя библиотека округляет количество выборок, почему бы вам не попробовать с большим количеством выборок?

4. Пожалуйста, явно укажите свой импорт

5. @kaysush Я уже пробовал это, но получаю тот же результат.