Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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 动态定义结构的列值_Apache Spark_Pyspark_Apache Spark Sql_Pyspark Sql - Fatal编程技术网

Apache spark 动态定义结构的列值

Apache spark 动态定义结构的列值,apache-spark,pyspark,apache-spark-sql,pyspark-sql,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Sql,我有两个嵌套数组,一个是字符串,另一个是浮点数。我想基本上压缩这个,每行有一个(value,var)组合。我试着只使用一个数据帧,而不必求助于RDD或UDF,因为我认为这样会更干净、更快 我可以将每行的值、变量数组转换为每行1个值、变量的结构,但由于数组大小不同,我必须在不同的范围内运行数组理解。所以我想我可以在一列中指定长度并使用它。但是因为我会使用一个列,所以这是一个语法错误。关于如何使用列动态构建这样的结构(如果可能,不使用rdd/udf)的任何建议 从pyspark.sql.functi

我有两个嵌套数组,一个是字符串,另一个是浮点数。我想基本上压缩这个,每行有一个(value,var)组合。我试着只使用一个数据帧,而不必求助于RDD或UDF,因为我认为这样会更干净、更快

我可以将每行的值、变量数组转换为每行1个值、变量的结构,但由于数组大小不同,我必须在不同的范围内运行数组理解。所以我想我可以在一列中指定长度并使用它。但是因为我会使用一个列,所以这是一个语法错误。关于如何使用列动态构建这样的结构(如果可能,不使用rdd/udf)的任何建议

从pyspark.sql.functions导入列、数组、结构、分解
DF1=spark.createDataFrame([([“a”、“b”、“c”、“d”、“e”、“f”],[1,2,3,4,5,6],6),
([“g”],[7],1),
([“a”、“b”、“g”、“c”],[4,5,3,6],4),
([“c”,“d”],[2,3],2),
([“a”、“b”、“c”],[5,7,2],3)],
[“变量”、“VAL”、“num_元素”])
DF1.show()
arrayofstructs=数组(*[struct](
DF1.vars[c].别名(“变量”),
DF1.vals[c].别名(“值”)

#)对于DF1.num_elements])#中的c,您可以尝试以下方法:

从pyspark.sql.functions导入col、lit、posexplode、expr、split
(DF1
.select(“*”,posexplode(拆分(expr(“repeat(“'uu',num'u elements-1)”),'uu'))
.选择(列(“变量”).getItem(列(“位置”)、列(“VAL”).getItem(列(“位置”))
.show())
# +---------+---------+
#| vars[pos]| VAL[pos]|
# +---------+---------+
#| a | 1|
#| b | 2|
#| c | 3|
#| d | 4|
#| e | 5|
#| f | 6|
#| g | 7|
#| a | 4|
#| b | 5|
#| g | 3|
#| c | 6|
#| c | 2|
#| d | 3|
#| a | 5|
#| b | 7|
#| c | 2|
# +---------+---------+
但它绝不是“更干净、更快”。我个人会使用
RDD

(DF1.rdd
.flatMap(lambda行:((val,var)表示val,zip中的var(row.vals,row.vars)))
.toDF([“val”,“var”])
.show())
# +---+---+
#| val | var|
# +---+---+
#| 1 | a|
#| 2 | b|
#| 3 | c|
#| 4 | d|
#| 5 | e|
#| 6 | f|
#| 7 | g|
#| 4 | a|
#| 5 | b|
#| 3 | g|
#| 6 | c|
#| 2 | c|
#| 3 | d|
#| 5 | a|
#| 7 | b|
#| 2 | c|
# +---+---+

但是,
udf
也会起作用。

非常感谢您的回复。在第一种方法中-
。在第二种方法中选择(“*”,col(“vars”).getItem(col(“pos”)),col(“vals”).getItem(col(“pos”))
。平面图(lambda行:((row,val,var)表示val,var表示zip(row.vals,row.vars))。toDF([“data”,“val”,“var”)
)。
from pyspark.sql.functions import col, array, struct, explode

DF1 = spark.createDataFrame([(["a", "b", "c", "d", "e", "f"], [1,2,3,4,5,6], 6),
                             (["g"], [7], 1),
                             (["a", "b", "g", "c"], [4,5,3,6], 4),
                             (["c", "d"], [2,3], 2),
                             (["a", "b", "c"], [5,7,2], 3)],
                            ["vars", "vals", "num_elements"])
DF1.show()

arrayofstructs = array(*[struct(
  DF1.vars[c].alias("variables"),
  DF1.vals[c].alias("values")
#) for c in DF1.num_elements]) # <- DOES NOT WORK
) for c in range(10)])         # <- FIXED SIZE DOES WORK

DF2 = DF1.withColumn("new", explode(arrayofstructs))
DF2.show()

DF3 = DF2.filter(DF2.new.variables.isNotNull())
DF3.show()


+------------------+------------------+------------+
|              vars|              vals|num_elements|
+------------------+------------------+------------+
|[a, b, c, d, e, f]|[1, 2, 3, 4, 5, 6]|           6|
|               [g]|               [7]|           1|
|      [a, b, g, c]|      [4, 5, 3, 6]|           4|
|            [c, d]|            [2, 3]|           2|
|         [a, b, c]|         [5, 7, 2]|           3|
+------------------+------------------+------------+

+------------------+------------------+------------+------+
|              vars|              vals|num_elements|   new|
+------------------+------------------+------------+------+
|[a, b, c, d, e, f]|[1, 2, 3, 4, 5, 6]|           6|[a, 1]|
|[a, b, c, d, e, f]|[1, 2, 3, 4, 5, 6]|           6|[b, 2]|
|[a, b, c, d, e, f]|[1, 2, 3, 4, 5, 6]|           6|[c, 3]|
|[a, b, c, d, e, f]|[1, 2, 3, 4, 5, 6]|           6|[d, 4]|
|[a, b, c, d, e, f]|[1, 2, 3, 4, 5, 6]|           6|[e, 5]|
|[a, b, c, d, e, f]|[1, 2, 3, 4, 5, 6]|           6|[f, 6]|
|[a, b, c, d, e, f]|[1, 2, 3, 4, 5, 6]|           6|   [,]|
|[a, b, c, d, e, f]|[1, 2, 3, 4, 5, 6]|           6|   [,]|
|[a, b, c, d, e, f]|[1, 2, 3, 4, 5, 6]|           6|   [,]|
|[a, b, c, d, e, f]|[1, 2, 3, 4, 5, 6]|           6|   [,]|
|               [g]|               [7]|           1|[g, 7]|
|               [g]|               [7]|           1|   [,]|
|               [g]|               [7]|           1|   [,]|
|               [g]|               [7]|           1|   [,]|
|               [g]|               [7]|           1|   [,]|
|               [g]|               [7]|           1|   [,]|
|               [g]|               [7]|           1|   [,]|
|               [g]|               [7]|           1|   [,]|
|               [g]|               [7]|           1|   [,]|
|               [g]|               [7]|           1|   [,]|
+------------------+------------------+------------+------+
only showing top 20 rows

+------------------+------------------+------------+------+
|              vars|              vals|num_elements|   new|
+------------------+------------------+------------+------+
|[a, b, c, d, e, f]|[1, 2, 3, 4, 5, 6]|           6|[a, 1]|
|[a, b, c, d, e, f]|[1, 2, 3, 4, 5, 6]|           6|[b, 2]|
|[a, b, c, d, e, f]|[1, 2, 3, 4, 5, 6]|           6|[c, 3]|
|[a, b, c, d, e, f]|[1, 2, 3, 4, 5, 6]|           6|[d, 4]|
|[a, b, c, d, e, f]|[1, 2, 3, 4, 5, 6]|           6|[e, 5]|
|[a, b, c, d, e, f]|[1, 2, 3, 4, 5, 6]|           6|[f, 6]|
|               [g]|               [7]|           1|[g, 7]|
|      [a, b, g, c]|      [4, 5, 3, 6]|           4|[a, 4]|
|      [a, b, g, c]|      [4, 5, 3, 6]|           4|[b, 5]|
|      [a, b, g, c]|      [4, 5, 3, 6]|           4|[g, 3]|
|      [a, b, g, c]|      [4, 5, 3, 6]|           4|[c, 6]|
|            [c, d]|            [2, 3]|           2|[c, 2]|
|            [c, d]|            [2, 3]|           2|[d, 3]|
|         [a, b, c]|         [5, 7, 2]|           3|[a, 5]|
|         [a, b, c]|         [5, 7, 2]|           3|[b, 7]|
|         [a, b, c]|         [5, 7, 2]|           3|[c, 2]|
+------------------+------------------+------------+------+