【发布时间】:2019-11-26 15:27:47
【问题描述】:
我希望 col4 和 col5 应该以 ArrayType 的形式出现,它们以 StringType 的形式出现。它在 pyspark 中。 我想知道我们如何做到这一点。
col4 --array (nullable = true)
|-- element: IntegerType() (containsNull = true)
col5:--array (nullable = true)
|-- element: string (containsNull = true)
+---+-----------+
| id| value|
+---+-----------+
| 1| [foo, foo]|
| 2|[bar, tooo]|
+---+-----------+
+---+-----------+---------------------+
|id |value |TF_CUS(value) |
+---+-----------+---------------------+
|1 |[foo, foo] |[[foo], [2]] |
|2 |[bar, tooo]|[[bar, tooo], [1, 1]]|
+---+-----------+---------------------+
+---+-----------+---------------------+------+-----------+
|id |value |TF_CUS |col4 |col5 |
+---+-----------+---------------------+------+-----------+
|1 |[foo, foo] |[[foo], [2]] |[2] |[foo] |
|2 |[bar, tooo]|[[bar, tooo], [1, 1]]|[1, 1]|[bar, tooo]|
+---+-----------+---------------------+------+-----------+
期待看到解决方案
根
|-- id: long (可为空 = true)
|-- 值:数组(可为空=真)
| |-- 元素:字符串(包含Null = true)
|-- TF_CUS: 数组(可为空=真)
| |-- 元素:字符串 (containsNull = true)enter code here
|-- col4: 字符串(可为空=真)
|-- col5: 字符串 (nullable = true)
from pyspark.sql.types import *
from pyspark.sql.functions import udf
from pyspark.sql.types import StructType
from pyspark.sql.types import StructField
from pyspark.sql.types import StringType
from pyspark.sql.types import DoubleType
from pyspark.sql.types import ArrayType
def TF_CUS(lista):
from collections import Counter
counts = (Counter(lista))
return (list(counts.keys()), list(counts.values()))
TF_CUS_cols = udf(TF_CUS, ArrayType(StringType()))
df = sc.parallelize([(1, ["foo","foo"] ), (2, ["bar", "tooo"])]).toDF(["id", "value"])
df.show()
df.select("*", TF_CUS_cols(df["value"])).show(2, False)
df = df.select("*", TF_CUS_cols(df["value"]).alias("TF_CUS"))
df.withColumn("col4", df["TF_CUS"].getItem(1)).withColumn("col5", df["TF_CUS"].getItem(0)).show(2, False)
df = df.withColumn("col4", (df["TF_CUS"].getItem(1))).withColumn("col5", df["TF_CUS"].getItem(0))
【问题讨论】:
标签: apache-spark pyspark apache-spark-sql apache-spark-mllib