PySparkに:私はこのエラーを取得する
from pyspark.sql.functions import col
meta = {"ml_attr": {
"vals": [str(x) for x in range(6)], # Provide a set of levels
"type": "nominal",
"name": "class"}}
loaded.transform(
df.withColumn("class", col("class").alias("class", metadata=meta)))
Unfortunalely:だからこのthreadで「時間」フィールドの真の範囲を反映するために、データフレームのメタデータを更新するには掲載ソリューションがあります2.1の場合、alias
メソッドには引数がありませんmetadata
(docs) - これはSpark 2.2のbecame availableです。
import json
from pyspark import SparkContext
from pyspark.sql import Column
from pyspark.sql.functions import col
spark.version
# u'2.1.1'
df = sc.parallelize((
(0, "x", 2.0),
(1, "y", 3.0),
(2, "x", -1.0)
)).toDF(["label", "x1", "x2"])
df.show()
# +-----+---+----+
# |label| x1| x2|
# +-----+---+----+
# | 0| x| 2.0|
# | 1| y| 3.0|
# | 2| x|-1.0|
# +-----+---+----+
我々があることを私たちのlabel
データの可能性を強化したいとすると:それにもかかわらず、@eliasahと@zero323によって維持、信じられないほどのSpark Gotchasに、PySpark < 2.2に感謝し、列のメタデータを変更することも可能ですthis answerにも
def withMeta(self, alias, meta):
sc = SparkContext._active_spark_context
jmeta = sc._gateway.jvm.org.apache.spark.sql.types.Metadata
return Column(getattr(self._jc, "as")(alias, jmeta.fromJson(json.dumps(meta))))
Column.withMeta = withMeta
# new metadata:
meta = {"ml_attr": {"name": "label_with_meta",
"type": "nominal",
"vals": [str(x) for x in range(6)]}}
df_with_meta = df.withColumn("label_with_meta", col("label").withMeta("", meta))
賞賛:0と5の間で、それにもかかわらず、当社のデータフレームで0と2の間にある、ここでは、列のメタデータを変更する方法ですゼロによってゼロ323!
あなたが指すトレッドは、Scala APIを指します。 pyspark 2.1では、 'alias'メソッドには引数がありません' metadata' http://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html#pyspark.sql.Column.alias - これはスレッドがより役に立ちます:https://stackoverflow.com/questions/44273080/how-to-change-column-metadata-in-pyspark – desertnaut
助けてくれてありがとう。私はupvoteと受け入れることができるように回答として投稿してくださいあなたは非常に歓迎されている –
- クレジット帰属 – desertnaut