Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何在Spark 2.1上更新pyspark数据帧元数据?_Apache Spark_Pyspark_Apache Spark Sql_Spark Dataframe_Pyspark Sql - Fatal编程技术网

Apache spark 如何在Spark 2.1上更新pyspark数据帧元数据?

Apache spark 如何在Spark 2.1上更新pyspark数据帧元数据?,apache-spark,pyspark,apache-spark-sql,spark-dataframe,pyspark-sql,Apache Spark,Pyspark,Apache Spark Sql,Spark Dataframe,Pyspark Sql,SparkML的OneHotEncoder面临一个问题,因为它读取数据帧元数据以确定它应该为其创建的稀疏向量对象分配的值范围 更具体地说,我使用包含0到23之间的所有单个值的训练集对“hour”字段进行编码 现在,我使用管道中的“转换”方法对单行数据帧进行评分 不幸的是,这会导致OneHotEncoder使用不同编码的稀疏向量对象 (24、[5]、[1.0])对(11、[10]、[1.0]) 我已经记录了这一点,但这被确定为重复。因此,这里发布了一个解决方案来更新数据帧的元数据,以反映“小时”字

SparkML的OneHotEncoder面临一个问题,因为它读取数据帧元数据以确定它应该为其创建的稀疏向量对象分配的值范围

更具体地说,我使用包含0到23之间的所有单个值的训练集对“hour”字段进行编码

现在,我使用管道中的“转换”方法对单行数据帧进行评分

不幸的是,这会导致OneHotEncoder使用不同编码的稀疏向量对象

(24、[5]、[1.0])对(11、[10]、[1.0])

我已经记录了这一点,但这被确定为重复。因此,这里发布了一个解决方案来更新数据帧的元数据,以反映“小时”字段的实际范围:

从pyspark.sql.functions导入col
meta={“ml_attr”:{
“VAL”:[str(x)表示范围(6)内的x],#提供一组级别
“类型”:“标称”,
“名称”:“类”}
加载.转换(
df.withColumn(“class”,col(“class”)。别名(“class”,metadata=meta)))
不幸的是,我得到了这个错误:

TypeError:alias()获得意外的关键字参数“metadata”


在PySpark 2.1中,
别名
方法没有参数
元数据
()——这在Spark 2.2中是;尽管如此,仍然可以修改PySpark<2.2中的列元数据,这要归功于由和维护的难以置信的:

导入json
从pyspark导入SparkContext
从pyspark.sql导入列
从pyspark.sql.functions导入col
spark.version
#u'2.1.1'
df=sc.parallelize((
(0,“x”,2.0),
(1,“y”,3.0),
(2,“x”,-1.0)
)).toDF([“标签”、“x1”、“x2”])
df.show()
# +-----+---+----+ 
#|标签| x1 | x2|
# +-----+---+----+
#| 0 | x | 2.0|
#| 1 | y | 3.0|
#| 2 | x |-1.0|
# +-----+---+----+
假设我们希望强制执行
标签
数据介于0和5之间的可能性,尽管数据帧中的数据介于0和2之间,下面是我们应该如何修改列元数据:

def with meta(self、alias、meta):
sc=SparkContext.\u活动\u spark\u上下文
jmeta=sc.\u gateway.jvm.org.apache.spark.sql.types.Metadata
返回列(getattr(self._jc,“as”)(别名,jmeta.fromJson(json.dumps(meta)))
Column.withMeta=withMeta
#新元数据:
meta={“ml_attr”:{“name”:“用_meta标记_”,
“类型”:“标称”,
“VAL”:[str(x)表示范围(6)]}内的x
df_with_meta=df.withColumn(“label_with_meta”,col(“label”)。withMeta(“,meta))

荣誉也归零323

在PySpark 2.1中,
别名
方法没有参数
元数据
()——这是在Spark 2.2中;尽管如此,仍然可以修改PySpark<2.2中的列元数据,这要归功于由和维护的难以置信的:

导入json
从pyspark导入SparkContext
从pyspark.sql导入列
从pyspark.sql.functions导入col
spark.version
#u'2.1.1'
df=sc.parallelize((
(0,“x”,2.0),
(1,“y”,3.0),
(2,“x”,-1.0)
)).toDF([“标签”、“x1”、“x2”])
df.show()
# +-----+---+----+ 
#|标签| x1 | x2|
# +-----+---+----+
#| 0 | x | 2.0|
#| 1 | y | 3.0|
#| 2 | x |-1.0|
# +-----+---+----+
假设我们希望强制执行
标签
数据介于0和5之间的可能性,尽管数据帧中的数据介于0和2之间,下面是我们应该如何修改列元数据:

def with meta(self、alias、meta):
sc=SparkContext.\u活动\u spark\u上下文
jmeta=sc.\u gateway.jvm.org.apache.spark.sql.types.Metadata
返回列(getattr(self._jc,“as”)(别名,jmeta.fromJson(json.dumps(meta)))
Column.withMeta=withMeta
#新元数据:
meta={“ml_attr”:{“name”:“用_meta标记_”,
“类型”:“标称”,
“VAL”:[str(x)表示范围(6)]}内的x
df_with_meta=df.withColumn(“label_with_meta”,col(“label”)。withMeta(“,meta))

荣誉也归零323

您指向的踏板指的是Scala API;在pyspark 2.1中,
alias
方法没有参数
metadata
——这个线程可能更有用:这很有帮助,非常感谢。请作为答案发布,以便我可以投票并接受您非常欢迎-答案发布,信用属性您所指的踏板指的是Scala API;在pyspark 2.1中,
alias
方法没有参数
metadata
——这个线程可能更有用:这很有帮助,非常感谢。请把答案贴出来,这样我就可以投票和接受你是非常受欢迎的-答案贴出来,信用归因