Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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
Arrays Spark数据集到阵列的转换_Arrays_Apache Spark_Apache Spark Sql_Transformation_Large Data - Fatal编程技术网

Arrays Spark数据集到阵列的转换

Arrays Spark数据集到阵列的转换,arrays,apache-spark,apache-spark-sql,transformation,large-data,Arrays,Apache Spark,Apache Spark Sql,Transformation,Large Data,我有一个如下的数据集;col1的值重复多次,col2的值是唯一的。这个原始数据集可以存储近十亿行,所以我不想使用collect或collect_list,因为它不会扩展到我的用例 原始数据集: +---------------------| | col1 | col2 | +---------------------| | AA| 11 | | BB| 21 | | AA| 12 | | AA|

我有一个如下的数据集;col1的值重复多次,col2的值是唯一的。这个原始数据集可以存储近十亿行,所以我不想使用collect或collect_list,因为它不会扩展到我的用例

原始数据集:

+---------------------|
|    col1  |    col2  |
+---------------------|
|    AA|    11        |
|    BB|    21        |
|    AA|    12        |
|    AA|    13        |
|    BB|    22        |
|    CC|    33        |
+---------------------|
我想将数据集转换为以下数组格式。newColumn作为col2的数组

转换的数据集:

+---------------------|
|col1  |     newColumn|
+---------------------|
|    AA|    [11,12,13]|
|    BB|    [21,22]   |
|    CC|    [33]      |
+---------------------|
我见过这个解决方案,但它使用collect_列表,不会在大数据集上扩展

  • 加载数据帧
  • 分组依据
    col1
  • 使用
    collect\u list
  • 加载数据帧
  • 分组依据
    col1
  • 使用
    collect\u list

  • 使用spark的内置功能始终是最好的方法。 我认为使用collect_list函数没有问题。只要你有足够的记忆,这将是最好的方法。 优化作业的一种方法是将数据保存为拼花地板,按列A存储数据并将其保存为表格。更好的做法是,还可以通过一些均匀分布数据的列对其进行分区

    比如说,

    df_stored = #load your data from csv or parquet or any format'
    spark.catalog.setCurrentDatabase(database_name)
    df_stored.write.mode("overwrite").format("parquet").partitionBy(part_col).bucketBy(10,"col1").option("path",savepath).saveAsTable(tablename)
    df_analysis = spark.table(tablename)
    df_aggreg = df_analysis.groupby('col1').agg(F.collect_list(col('col2')))
    

    这将加速聚合并避免大量的混乱。试试看

    使用spark的内置功能始终是最好的方法。 我认为使用collect_list函数没有问题。只要你有足够的记忆,这将是最好的方法。 优化作业的一种方法是将数据保存为拼花地板,按列A存储数据并将其保存为表格。更好的做法是,还可以通过一些均匀分布数据的列对其进行分区

    比如说,

    df_stored = #load your data from csv or parquet or any format'
    spark.catalog.setCurrentDatabase(database_name)
    df_stored.write.mode("overwrite").format("parquet").partitionBy(part_col).bucketBy(10,"col1").option("path",savepath).saveAsTable(tablename)
    df_analysis = spark.table(tablename)
    df_aggreg = df_analysis.groupby('col1').agg(F.collect_list(col('col2')))
    

    这将加速聚合并避免大量的混乱。试试看

    谢谢,@Raghu,是的,我计划在执行groupBy之前使用bucket和partition保存数据集。我将使用collect_列表进行测试并做出响应。我过去对collect_ist有过一些问题,但这也取决于它的实现。在这个场景中,我假设因为我将在agg中使用collect_list,所以大小永远不会太大。超级,让我知道它是如何工作的。Hi@Raghu,我测试了这将使我的应用程序按预期工作,不会出现任何内存过载。再次感谢您从性能角度回答我的问题!很高兴听到:-)谢谢,@Raghu,是的,我计划在执行groupBy之前使用bucket和partition保存数据集。我将使用collect_列表进行测试并做出响应。我过去对collect_ist有过一些问题,但这也取决于它的实现。在这个场景中,我假设因为我将在agg中使用collect_list,所以大小永远不会太大。超级,让我知道它是如何工作的。Hi@Raghu,我测试了这将使我的应用程序按预期工作,不会出现任何内存过载。再次感谢您从性能角度回答我的问题!很高兴听到:-)我对这个问题投了赞成票,因为这更多的是关于性能,而不是程序本身。我想知道为什么这是关闭的啊,这里是一样的,它是自动关闭的,可能没有阅读整个问题,错过了性能方面。我对问题投了赞成票,因为这更多是关于性能,而不是程序本身。我想知道为什么这是关闭的啊,这里也是一样,它是自动关闭的,可能没有阅读整个问题,错过了性能方面。