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
Spark将检索到的数据保存在Azure Databricks的何处?_Azure_Apache Spark_Azure Databricks - Fatal编程技术网

Spark将检索到的数据保存在Azure Databricks的何处?

Spark将检索到的数据保存在Azure Databricks的何处?,azure,apache-spark,azure-databricks,Azure,Apache Spark,Azure Databricks,我想了解Azure databricks中RAM和存储之间的区别 假设我正在从Azure data lake(ADLS Gen 2)读取csv数据,如下所示: df = spark.read.csv("path to the csv file").collect() 我知道spark中的read方法是spark中的Transformation方法。这不会马上运行。但是,现在如果我使用collect()方法执行操作,我会假设数据现在实际上已由Spark从数据池读取并加载到RAM或磁盘。首先,我想

我想了解Azure databricks中
RAM
存储之间的区别

假设我正在从Azure data lake(ADLS Gen 2)读取csv数据,如下所示:

df = spark.read.csv("path to the csv file").collect()
  • 我知道spark中的
    read
    方法是spark中的
    Transformation
    方法。这不会马上运行。但是,现在如果我使用
    collect()
    方法执行
    操作
    ,我会假设数据现在实际上已由Spark从数据池读取并加载到
    RAM
    磁盘
    。首先,我想知道,数据存储在哪里。它是在
    RAM
    中还是在
    Disk
    中。而且,如果数据存储在
    RAM
    中,那么
    cache
    用于什么?;如果数据被检索并存储在
    磁盘上
    ,那么persist做什么呢?我知道
    cache
    将数据存储在内存中以备以后使用,如果我有大量数据,我可以使用
    persist
    将数据存储到
    磁盘中

  • 我想知道,如果我们有PB的数据,databricks可以扩展多少

  • RAM
    Disk
    的大小相差多少
  • 我如何知道在任何时间点数据存储在何处
  • 运行Azure Databricks的底层操作系统是什么
  • 请注意,我是Azure Databricks和Spark的新手

    我想得到一些关于使用Spark的最佳实践的建议

    非常感谢你的帮助

    首先,我想知道,数据存储在哪里

    当您运行任何操作(即收集或其他)时,数据将从执行器节点收集到驱动程序节点,并存储在ram(内存)中

    如果数据存储在RAM中,那么缓存的作用是什么

    Spark有
    lazy求值
    这意味着,在你调用一个动作之前,它不会做任何事情,一旦你调用它,它就会创建一个
    DAG
    ,然后执行该DAF

    让我们通过一个例子来理解它。让我们考虑你有三个表<代码>表A ,<代码>表B 和<代码>表C < /代码>。您已经加入了这个表并应用了一些业务逻辑(映射和过滤器),让我们将此数据框称为
    filtered\u data
    。现在,您在5个不同的位置(另一个数据帧)使用此
    数据帧,用于查找或连接以及其他业务原因

    如果您不持久(缓存)您的
    filterd_数据
    dataframe,那么每次引用它时,它都会再次通过连接和其他业务逻辑。因此,如果要在多个位置使用数据帧,建议持久化(缓存)数据帧

    默认情况下,
    缓存
    存储在内存(RAM)中的数据,但您可以将存储级别设置为
    磁盘

    想知道,如果我们有PB的数据,databricks可以扩展多少

    这是一个分布式环境,所以您需要做的是添加更多的执行器。可能需要增加内存和CPU配置

    我如何知道在任何时间点数据存储在何处

    如果尚未创建表或视图,则它将存储在内存中

    运行Azure Databricks的底层操作系统是什么

    它使用
    linux
    操作系统。 特别是
    Linux-4.15.0-1050-azure-x86_64-with-Ubuntu-16.04-xenial

    您可以运行以下命令来了解

    import platform
    println(platform.platform())
    

    感谢@Shah的详细回答。关于您的第一个答案,如果我假设在一个数据帧上有10个转换操作,并且如果我为它们中的每一个维护一个引用
    df1,df2,…,df10
    ,那么如果我说例如:
    df11=df6.map(lambda x:x**2)
    ;然后,我假设所有先前的数据帧
    df1到df6
    都将被再次计算,“在我对
    df11
    执行操作之后”是否正确?第二,我可以将数据保存到工作节点的磁盘中而不是
    驱动程序
    节点上吗?最后,如果我写回云存储,后端会发生什么?工作节点执行写操作,还是驱动节点的工作?我们是否可以将此操作并行化为“写入云存储,即ADLS Gen 2”?如果您能通过编辑您的答案来回答这些问题,我将不胜感激。谢谢@I.A.你明白了。正确的。。所有操作将再次执行。这时您应该使用
    缓存
    持久化
    。缓存数据帧时,它位于
    ram
    上,分布在
    执行器上。当您保存为表或在磁盘上持久化时,它也是分布式的。我对最后一个问题不是100%确定。不过,我认为遗嘱执行人也会注意书写。