我开始使用Spark DataFrames,我需要能够透过数据来创建多列的1列中的多列.在Scalding中有内置的功能,我相信Python中的Pandas,但我找不到任何新的Spark Dataframe.
我假设我可以编写某种类型的自定义函数,但是我甚至不确定如何启动,特别是因为我是Spark的新手.我有人知道如何使用内置功能或如何在Scala中编写内容的建议,非常感谢.
我正在尝试将我的表的某些列转换为行.我正在使用Python和Spark 1.5.0.这是我的初始表:
+-----+-----+-----+-------+
| A |col_1|col_2|col_...|
+-----+-------------------+
| 1 | 0.0| 0.6| ... |
| 2 | 0.6| 0.7| ... |
| 3 | 0.5| 0.9| ... |
| ...| ...| ...| ... |
Run Code Online (Sandbox Code Playgroud)
我想有这样的事情:
+-----+--------+-----------+
| A | col_id | col_value |
+-----+--------+-----------+
| 1 | col_1| 0.0|
| 1 | col_2| 0.6|
| ...| ...| ...|
| 2 | col_1| 0.6|
| 2 | col_2| 0.7|
| ...| ...| ...|
| 3 | col_1| 0.5|
| 3 | …Run Code Online (Sandbox Code Playgroud) 我手头有一个问题声明,我想在spark-sql/pyspark中取消对表的删除.我已经阅读了文档,我可以看到只支持pivot,但到目前为止还没有支持un-pivot.有没有办法实现这个目标?
让我的初始表看起来像这样:
当我使用下面提到的命令在pyspark中进行调整时:
df.groupBy("A").pivot("B").sum("C")
Run Code Online (Sandbox Code Playgroud)
我把它作为输出:
现在我想取消转动的表格.通常,此操作可能会/可能不会根据我转动原始表的方式产生原始表.
到目前为止,Spark-sql并不提供对unpivot的开箱即用支持.有没有办法实现这个目标?
正如主题所描述的,我有一个 PySpark 数据框,我需要将三列融合成行。每列基本上代表一个类别中的一个事实。最终目标是将数据聚合到每个类别的单个总数中。
这个数据帧中有数千万行,所以我需要一种方法来在 Spark 集群上进行转换而不将任何数据带回驱动程序(在这种情况下为 Jupyter)。
这是我的几个商店的数据框的摘录:
+-----------+----------------+-----------------+----------------+
| store_id |qty_on_hand_milk|qty_on_hand_bread|qty_on_hand_eggs|
+-----------+----------------+-----------------+----------------+
| 100| 30| 105| 35|
| 200| 55| 85| 65|
| 300| 20| 125| 90|
+-----------+----------------+-----------------+----------------+
这是所需的结果数据帧,每个商店多行,其中原始数据帧的列已融合到新数据帧的行中,每个原始列在新类别列中占一行:
+-----------+--------+-----------+
| product_id|CATEGORY|qty_on_hand|
+-----------+--------+-----------+
| 100| milk| 30|
| 100| bread| 105|
| 100| eggs| 35|
| 200| milk| 55|
| 200| bread| 85|
| 200| eggs| 65|
| 300| milk| 20|
| 300| bread| 125|
| 300| eggs| 90|
+-----------+--------+-----------+
最终,我想聚合结果数据框以获得每个类别的总数:
+--------+-----------------+
|CATEGORY|total_qty_on_hand|
+--------+-----------------+
| milk| 105|
| bread| …
我们使用melt和dcast来转换宽 - >长 - 长 - >宽格式的数据.有关详细信息,请参阅http://seananderson.ca/2013/10/19/reshape.html.
scala或SparkR都可以.
我已经浏览了这个博客和scala函数以及R API.我没有看到做类似工作的功能.
Spark中有任何等效功能吗?如果没有,在Spark中有没有其他方法可以做到这一点?
我正在使用 sparklyr 来操作一些数据。给定一个,
a<-tibble(id = rep(c(1,10), each = 10),
attribute1 = rep(c("This", "That", 'These', 'Those', "The", "Other", "Test", "End", "Start", 'Beginning'), 2),
value = rep(seq(10,100, by = 10),2),
average = rep(c(50,100),each = 10),
upper_bound = rep(c(80, 130), each =10),
lower_bound = rep(c(20, 70), each =10))
Run Code Online (Sandbox Code Playgroud)
我想使用“收集”来操作数据,如下所示:
b<- a %>%
gather(key = type_data, value = value_data, -c(id:attribute1))
Run Code Online (Sandbox Code Playgroud)
但是,“收集”在 sparklyr 上不可用。我见过一些人使用 sdf_pivot 来模仿“收集”(例如,如何在 sparklyr 中使用 sdf_pivot() 并连接字符串?)但我看不出在这种情况下如何使用它。
有没有人有想法?
干杯!
是否有类似于meltSparkR 库中的功能?
将 1 行 50 列的数据转换为 50 行 3 列?
我有一个多列的 pyspark 数据框,如下所示:
name col1 col2 col3
A 1 6 7
B 2 7 6
C 3 8 5
D 4 9 4
E 5 8 3
Run Code Online (Sandbox Code Playgroud)
我想通过将 col1、col2、col3 的列名和列值组合成两个新列,例如 new_col 和 new_col_val,跨行创建一个新的数据框:
我使用以下代码在 R 中做了同样的事情:
df1 <- gather(df,new_col,new_col_val,-name)
Run Code Online (Sandbox Code Playgroud)
我想创建 3 个单独的数据帧,它们将包含原始数据帧中的每一列,然后将它们附加在一起,但我的数据有超过 2500k 行和大约 60 列。创建多个数据框将是最糟糕的主意。谁能告诉我如何在 pyspark 中执行此操作?
我正在 databricks 中尝试这个。请让我知道需要导入的 pyspark 库以及在 Azure databricks pyspark 中获取以下输出的代码
示例:- 输入数据框:-
| column1 | column2 | column3 | column4 |
| a | bbbbb | cc | >dddddddd |
| >aaaaaaaaaaaaaa | bb | c | dddd |
| aa | >bbbbbbbbbbbb | >ccccccc | ddddd |
| aaaaa | bbbb | ccc | d |
Run Code Online (Sandbox Code Playgroud)
输出数据帧:-
| column | maxLength |
| column1 | 14 |
| column2 | 12 |
| column3 | 7 |
| column4 | …Run Code Online (Sandbox Code Playgroud)