Hadoop 如何将配置单元表转换为MLlib标签点?

Hadoop 如何将配置单元表转换为MLlib标签点?,hadoop,apache-spark,hive,pyspark,apache-spark-mllib,Hadoop,Apache Spark,Hive,Pyspark,Apache Spark Mllib,我使用黑斑羚构建了一个表,其中包含一个目标和数百个特性。 我想用Spark MLlib来训练一个模型。 我知道为了通过Spark运行分布式监督模型,数据需要采用几种格式之一。对我来说,标签点似乎是最直观的。 使用PySpark将配置单元表转换为标记点的最有效方法是什么?解决此问题的最佳方法可能是使用ml库及其模型,因为它们直接作用于数据帧 然而,MLAPI还没有达到与mllib的功能对等,您可能缺少一些需要的东西。因此,我们在工作流中通过调用配置单元上下文检索的数据帧上的映射来解决这个问题 f

我使用黑斑羚构建了一个表,其中包含一个目标和数百个特性。 我想用Spark MLlib来训练一个模型。 我知道为了通过Spark运行分布式监督模型,数据需要采用几种格式之一。对我来说,标签点似乎是最直观的。
使用PySpark将配置单元表转换为标记点的最有效方法是什么?

解决此问题的最佳方法可能是使用ml库及其模型,因为它们直接作用于数据帧

然而,MLAPI还没有达到与mllib的功能对等,您可能缺少一些需要的东西。因此,我们在工作流中通过调用配置单元上下文检索的数据帧上的映射来解决这个问题

from pyspark import SparkContext, HiveContext
from pyspark.mllib.regression import LabeledPoint
from pyspark.mllib.classification import LogisticRegressionWithLBFGS

table_name = "MyTable"
target_col = "MyTargetCol"

sc = SparkContext()
hc = HiveContext(sc)

# get the table from the hive context
df = hc.table(table_name) 

# reorder columns so that we know the index of the target column
df = df.select(target_col, *[col for col in dataframe.columns if col != target_col])

# map through the data to produce an rdd of labeled points
rdd_of_labeled_points = df.map(lambda row: LabeledPoint(row[0], row[1:]))

# use the rdd as input to a model
model = LogisticRegressionWithLBFGS.train(rdd_of_labeled_points)

请记住,无论何时使用python进行映射,都需要将数据从JVM封送到python VM,因此性能会受到影响。我们发现,对于我们的数据而言,使用地图对性能的影响可以忽略不计,但您的里程数可能会有所不同。

解决此问题的最佳方法可能是使用ml库及其模型,因为它们直接作用于数据帧

然而,MLAPI还没有达到与mllib的功能对等,您可能缺少一些需要的东西。因此,我们在工作流中通过调用配置单元上下文检索的数据帧上的映射来解决这个问题

from pyspark import SparkContext, HiveContext
from pyspark.mllib.regression import LabeledPoint
from pyspark.mllib.classification import LogisticRegressionWithLBFGS

table_name = "MyTable"
target_col = "MyTargetCol"

sc = SparkContext()
hc = HiveContext(sc)

# get the table from the hive context
df = hc.table(table_name) 

# reorder columns so that we know the index of the target column
df = df.select(target_col, *[col for col in dataframe.columns if col != target_col])

# map through the data to produce an rdd of labeled points
rdd_of_labeled_points = df.map(lambda row: LabeledPoint(row[0], row[1:]))

# use the rdd as input to a model
model = LogisticRegressionWithLBFGS.train(rdd_of_labeled_points)
请记住,无论何时使用python进行映射,都需要将数据从JVM封送到python VM,因此性能会受到影响。我们发现,对于我们的数据,使用地图对性能的影响可以忽略不计,但您的里程数可能会有所不同