从 pandas 数据帧转换为 LabeledPoint RDD
Convert from pandas dataframe to LabeledPoint RDD
我正在 运行 对一个非常简单的数据集进行一些测试,该数据集基本上由数字数据组成。
可以查到here.
我在使用 pandas、numpy 和 scikit-learn 时效果很好,但是当我转向 Spark 时,我无法以正确的格式设置数据以将其输入决策树。
我正在做这个但没有用:
df = pd.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/poker/poker-hand-training-true.data')
raw_data = sc.parallelize(df)
train_dataset = raw_data.map(lambda line: line.split(","))\
.map(lambda line:LabeledPoint(line[10], np.array([float(x) for x in line[0:10]])))
尝试在地图函数中访问 line
时,我一直收到 IndexError: list index out of range
。
当我实际下载文件并更改代码如下时,我才设法让它工作:
raw_data = sc.textFile('.../datasets/poker-hand-training.data')
train_dataset = raw_data.map(lambda line: line.split(","))\
.map(lambda line:LabeledPoint(line[10], np.array([float(x) for x in line[0:10]])))
如果我不想下载数据集,是否可以使用 read_csv
直接从 pandas 数据帧准备好数据?
我建议您先将 Pandas DataFrame
转换为 Spark DataFrame
。您可以使用 sqlContext.createDataFrame 方法来做到这一点。
df = pd.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/poker/poker-hand-training-true.data', names=['S1','C1','S2','C2','S3','C3','S4','C4','S5','C5','class'])
s_df = spark.createDataFrame(df)
现在您可以使用此 Dataframe 来获取您的训练数据集。
train_dataset = s_df.rdd.map(lambda x: LabeledPoint(x[10], x[:10])).collect()
我正在 运行 对一个非常简单的数据集进行一些测试,该数据集基本上由数字数据组成。 可以查到here.
我在使用 pandas、numpy 和 scikit-learn 时效果很好,但是当我转向 Spark 时,我无法以正确的格式设置数据以将其输入决策树。
我正在做这个但没有用:
df = pd.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/poker/poker-hand-training-true.data')
raw_data = sc.parallelize(df)
train_dataset = raw_data.map(lambda line: line.split(","))\
.map(lambda line:LabeledPoint(line[10], np.array([float(x) for x in line[0:10]])))
尝试在地图函数中访问 line
时,我一直收到 IndexError: list index out of range
。
当我实际下载文件并更改代码如下时,我才设法让它工作:
raw_data = sc.textFile('.../datasets/poker-hand-training.data')
train_dataset = raw_data.map(lambda line: line.split(","))\
.map(lambda line:LabeledPoint(line[10], np.array([float(x) for x in line[0:10]])))
如果我不想下载数据集,是否可以使用 read_csv
直接从 pandas 数据帧准备好数据?
我建议您先将 Pandas DataFrame
转换为 Spark DataFrame
。您可以使用 sqlContext.createDataFrame 方法来做到这一点。
df = pd.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/poker/poker-hand-training-true.data', names=['S1','C1','S2','C2','S3','C3','S4','C4','S5','C5','class'])
s_df = spark.createDataFrame(df)
现在您可以使用此 Dataframe 来获取您的训练数据集。
train_dataset = s_df.rdd.map(lambda x: LabeledPoint(x[10], x[:10])).collect()