相关疑难解决方法(0)

如何融化Spark DataFrame?

PySpark中的Apache Spark中是否存在等效的Pandas Melt函数,或者至少在Scala中?

我到目前为止在python中运行了一个示例数据集,现在我想将Spark用于整个数据集.

提前致谢.

melt apache-spark apache-spark-sql pyspark

35
推荐指数
3
解决办法
1万
查看次数

使用Spark将列转换为行

我正在尝试将我的表的某些列转换为行.我正在使用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)

python transpose pivot apache-spark

26
推荐指数
4
解决办法
3万
查看次数

在Spark RDD和/或Spark DataFrame中重新整形/透视数据

我有以下格式的数据(RDD或Spark DataFrame):

from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)

 rdd = sc.parallelize([('X01',41,'US',3),
                       ('X01',41,'UK',1),
                       ('X01',41,'CA',2),
                       ('X02',72,'US',4),
                       ('X02',72,'UK',6),
                       ('X02',72,'CA',7),
                       ('X02',72,'XX',8)])

# convert to a Spark DataFrame                    
schema = StructType([StructField('ID', StringType(), True),
                     StructField('Age', IntegerType(), True),
                     StructField('Country', StringType(), True),
                     StructField('Score', IntegerType(), True)])

df = sqlContext.createDataFrame(rdd, schema)
Run Code Online (Sandbox Code Playgroud)

我想做的是'重塑'数据,将Country(特别是美国,英国和CA)中的某些行转换为列:

ID    Age  US  UK  CA  
'X01'  41  3   1   2  
'X02'  72  4   6   7   
Run Code Online (Sandbox Code Playgroud)

从本质上讲,我需要Python的pivot工作流程:

categories = ['US', 'UK', 'CA']
new_df = df[df['Country'].isin(categories)].pivot(index = 'ID', 
                                                  columns = 'Country',
                                                  values = 'Score')
Run Code Online (Sandbox Code Playgroud)

我的数据集相当大,所以我不能真正地collect()将数据摄取到内存中来进行Python本身的重塑.有没有办法 …

python pivot apache-spark apache-spark-sql pyspark

25
推荐指数
3
解决办法
2万
查看次数

Pyspark Dataframe上的Pivot String列

我有一个像这样的简单数据框:

rdd = sc.parallelize(
    [
        (0, "A", 223,"201603", "PORT"), 
        (0, "A", 22,"201602", "PORT"), 
        (0, "A", 422,"201601", "DOCK"), 
        (1,"B", 3213,"201602", "DOCK"), 
        (1,"B", 3213,"201601", "PORT"), 
        (2,"C", 2321,"201601", "DOCK")
    ]
)
df_data = sqlContext.createDataFrame(rdd, ["id","type", "cost", "date", "ship"])

df_data.show()
 +---+----+----+------+----+
| id|type|cost|  date|ship|
+---+----+----+------+----+
|  0|   A| 223|201603|PORT|
|  0|   A|  22|201602|PORT|
|  0|   A| 422|201601|DOCK|
|  1|   B|3213|201602|DOCK|
|  1|   B|3213|201601|PORT|
|  2|   C|2321|201601|DOCK|
+---+----+----+------+----+
Run Code Online (Sandbox Code Playgroud)

我需要按日期调整它:

df_data.groupby(df_data.id, df_data.type).pivot("date").avg("cost").show()

+---+----+------+------+------+
| id|type|201601|201602|201603|
+---+----+------+------+------+
|  2|   C|2321.0|  null|  null|
|  0|   A| 422.0|  22.0| …
Run Code Online (Sandbox Code Playgroud)

python dataframe apache-spark apache-spark-sql pyspark

23
推荐指数
1
解决办法
2万
查看次数

在spark-sql/pyspark中取消透视

我手头有一个问题声明,我想在spark-sql/pyspark中取消对表的删除.我已经阅读了文档,我可以看到只支持pivot,但到目前为止还没有支持un-pivot.有没有办法实现这个目标?

让我的初始表看起来像这样:

让我的初始表看起来像这样

当我使用下面提到的命令在pyspark中进行调整时:

df.groupBy("A").pivot("B").sum("C")
Run Code Online (Sandbox Code Playgroud)

我把它作为输出:

在数据透视表看起来像这样

现在我想取消转动的表格.通常,此操作可能会/可能不会根据我转动原始表的方式产生原始表.

到目前为止,Spark-sql并不提供对unpivot的开箱即用支持.有没有办法实现这个目标?

unpivot apache-spark apache-spark-sql pyspark

13
推荐指数
2
解决办法
1万
查看次数

收合Spark DataFrame

我在Scala中使用Spark。在Spark版本1.5中,我正在尝试将具有名称值组合的输入数据框转换为新的数据框,在该数据框中,所有名称都将转换为列和值作为行。

I / P数据帧:

ID  Name    Value  
1   Country US  
2   Country US  
2   State   NY  
3   Country UK  
4   Country India  
4   State   MH  
5   Country US  
5   State   NJ  
5   County  Hudson  
Run Code Online (Sandbox Code Playgroud)

在此处链接以获取图像

转置的DataFrame

ID  Country State   County  
1   US      NULL    NULL  
2   US      NY      NULL  
3   UK      NULL    NULL  
4   India   MH      NULL  
5   US      NJ      Hudson  
Run Code Online (Sandbox Code Playgroud)

链接到转置后的图像
似乎在这种用例中像数据透视一样会有所帮助,但spark 1.5.x版本不支持此功能。

有指针/帮助吗?

pivot scala dataframe apache-spark apache-spark-sql

5
推荐指数
1
解决办法
1068
查看次数

PySpark Dataframe 将列融合为行

正如主题所描述的,我有一个 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| …

python aggregate dataframe melt pyspark

5
推荐指数
2
解决办法
8400
查看次数

Spark支持融化和dcast

我们使用melt和dcast来转换宽 - >长 - 长 - >宽格式的数据.有关详细信息,请参阅http://seananderson.ca/2013/10/19/reshape.html.

scala或SparkR都可以.

我已经浏览了这个博客scala函数以及R API.我没有看到做类似工作的功能.

Spark中有任何等效功能吗?如果没有,在Spark中有没有其他方法可以做到这一点?

scala r melt apache-spark spark-dataframe

4
推荐指数
1
解决办法
2504
查看次数

使用 Spark scala 中另一列的值将行值转换为列

我正在尝试将行中的值与其另一列中的值转换为不同的列。例如 -

输入数据框就像 -

+-----------+
| X | Y | Z |
+-----------+
| 1 | A | a |
| 2 | A | b |
| 3 | A | c |
| 1 | B | d |
| 3 | B | e |
| 2 | C | f |
+-----------+
Run Code Online (Sandbox Code Playgroud)

输出数据框应该是这样的 -

+------------------------+
| Y | 1    | 2    | 3    |
+------------------------+
| A | a    | b    | c    |
| B …
Run Code Online (Sandbox Code Playgroud)

scala apache-spark apache-spark-sql

4
推荐指数
1
解决办法
6865
查看次数

在 Pyspark 中转置数据帧

如何在 Pyspark 中转置以下数据框?

这个想法是为了实现下面出现的结果。

import pandas as pd

d = {'id' : pd.Series([1, 1, 1, 2, 2, 2, 3, 3, 3], index=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']),
     'place' : pd.Series(['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A'], index=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']),
     'value' : pd.Series([10, 30, 20, 10, 30, 20, 10, 30, 20], index=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']),
     'attribute' : pd.Series(['size', 'height', 'weigth', 'size', 'height', 'weigth','size', 'height', 'weigth'], …
Run Code Online (Sandbox Code Playgroud)

apache-spark apache-spark-sql pyspark

4
推荐指数
1
解决办法
7021
查看次数

如何在Spark Scala中将行数据转置/透视到列?

我是Spark-SQL的新手。我在Spark Dataframe中有这样的信息

Company Type Status
A       X    done
A       Y    done
A       Z    done
C       X    done
C       Y    done
B       Y    done
Run Code Online (Sandbox Code Playgroud)

我想像下面这样显示

Company X-type Y-type Z-type
A       done    done    done
B       pending done    pending
C       done    done    pending
Run Code Online (Sandbox Code Playgroud)

我无法实现这是Spark-SQL

请帮忙

pivot scala apache-spark apache-spark-sql

3
推荐指数
1
解决办法
5827
查看次数

即使枢轴不是操作,Spark 枢轴也会调用作业

可能是一个愚蠢的问题,但我注意到:

val aggDF = df.groupBy("id").pivot("col1")
Run Code Online (Sandbox Code Playgroud)

导致调用 Job。使用 Notebook 在 Databricks 下运行。这样就得到了:

(1) Spark Jobs
    Job 4 View     (Stages: 3/3)
       Stage 12:     8/8
       Stage 13:     200/200
       Stage 14:     1/1
Run Code Online (Sandbox Code Playgroud)

我不知道pivot这是文档中的操作。

与往常一样,我无法在文档中找到合适的参考来解释这一点,但可能与被pivot视为操作或调用 Spark 的某个方面(即操作)有关。

apache-spark apache-spark-sql

3
推荐指数
1
解决办法
806
查看次数

如何在Spark中"密集"一个数据框

我有一个数据框看起来像:

item_id  week_id  sale amount
1           1         10
1           2         12
1           3         15
2           1         4
2           2         7
2           3         9
Run Code Online (Sandbox Code Playgroud)

我想将此数据帧转换为新的数据框,如下所示:

item_id   week_1     week_2     week_3
1          10          12         15
2          4            7          9
Run Code Online (Sandbox Code Playgroud)

这可以在R中轻松完成,但我不知道如何使用Scala使用Spark API.

scala apache-spark apache-spark-sql

2
推荐指数
1
解决办法
146
查看次数