小编akh*_*lly的帖子

如果 EMR 中的集群资源内存总量小于从 AWS S3 读取的数据集,Spark 如何读取和处理 AWS EMR 中的数据

假设我有一个 AWS 集群,其中包含 1 个主节点实例、5 个核心节点实例和任务节点,最多可自动扩展至 16 个实例。每个主/任务/核心节点具有以下配置:

Master Node : 16Vcore , 128 GB Memory, 600 SSD GB storage
Each Core Node : 4Vcore,16 GB memory,64 GB EBS storage
Each Task Node : 4Vcore,16 GB memory,50 GB EBS storage 
Run Code Online (Sandbox Code Playgroud)

现在,通过上述配置,所有任务节点可用的累积内存为16*16=256 GB ,可用的累积 EBS 存储为50GB*16=800GB。所以这是我的两个疑问(因为我试图完全理解它是如何工作的)

  1. 如果我有一个 HIVE 外部表,其存储位置为 s3,大小为 500 GB(大于所有任务节点可用的总内存 (RAM)),并且我需要读取所有数据以使用 Spark 执行一些分析转换,spark 将如何处理这个问题
  2. 假设在上面的场景中,spark 将溢出的数据溢出到磁盘中(我不确定,但仍然假设)。但是如果 S3 中的数据集超过 1 TB ,这超过了总存储量,会发生什么情况( 800 GB) + 内存 (256 GB) = 1056 GB

amazon-s3 amazon-web-services apache-spark pyspark

6
推荐指数
1
解决办法
1117
查看次数

如何将火花数据框中的两列相乘

假设我有一个名为“orderitems”的数据框,其架构如下

    DataFrame[order_item_id: int, order_item_order_id: int, order_item_product_id: int, order_item_quantity: int, order_item_subtotal: float, order_item_product_price: float]
Run Code Online (Sandbox Code Playgroud)

因此,作为检查数据质量的一部分,我需要确保所有行都满足以下公式: order_item_subtotal = (order_item_quantity*order_item_product_price)。为此,我需要添加一个名为“valid”的单独列,对于满足上述公式的所有行,它应该将“Y”作为值,而对于所有其他行,它应该将“N”作为值。我决定使用 when() 和 else() 以及 withColumn() 方法,如下所示。

    orderitems.withColumn("valid",when(orderitems.order_item_subtotal != (orderitems.order_item_product_price * orderitems.order_item_quantity),'N').otherwise("Y"))
Run Code Online (Sandbox Code Playgroud)

但它返回给我以下错误:

    TypeError: 'Column' object is not callable
Run Code Online (Sandbox Code Playgroud)

我知道这是因为我试图将两个列对象相乘。但我不确定如何解决这个问题,因为我仍然在 spark 学习过程中。我想知道,如何解决这个问题。我在 Python 中使用 Spark 2.3.0

apache-spark pyspark

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