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
Apache spark Spark中的数据帧和数据集_Apache Spark_Apache Spark Sql_Apache Spark Dataset - Fatal编程技术网

Apache spark Spark中的数据帧和数据集

Apache spark Spark中的数据帧和数据集,apache-spark,apache-spark-sql,apache-spark-dataset,Apache Spark,Apache Spark Sql,Apache Spark Dataset,我是Spark的新手,正在浏览数据帧和数据集。我试图理解它们之间的区别,但我感到困惑。 我一开始就发现RDD的抽象是按以下顺序进行的 RDD(Spark1.0)->数据帧(Spark1.3)->数据集(Spark1.6) Q.1在链接上,它说Dataframe是Dataset[Row]的别名,即Row类型的数据集。如果Dataframe是首先完成的RDD抽象,这是否意味着数据集已经存在于Spark1.3中,或者在开发Spark1.6时,Dataframe被重新定义为数据集[行] Q.2在链接上,

我是Spark的新手,正在浏览数据帧和数据集。我试图理解它们之间的区别,但我感到困惑。
我一开始就发现RDD的抽象是按以下顺序进行的

RDD(Spark1.0)->数据帧(Spark1.3)->数据集(Spark1.6)

Q.1在链接上,它说DataframeDataset[Row]的别名,即Row类型的数据集。如果Dataframe是首先完成的RDD抽象,这是否意味着数据集已经存在于Spark1.3中,或者在开发Spark1.6时,Dataframe被重新定义为数据集[行]

Q.2在链接上,它说

数据集是特定于域的对象的强类型集合,可以使用函数或关系操作并行转换。每个数据集还有一个称为DataFrame的非类型化视图,它是行的数据集

如果Dataframe实际上是Dataset[Row],为什么Dataframe被称为非类型化?这里的类型不是应该是Row[defined]吗

Q.3如果数据帧是Dataset[Row],那么为什么要单独定义数据帧?此外,Dataset的每个操作也应该可以在Dataframe上调用。如果上述陈述不真实或有点真实,请随时回答

如果这些问题涉及面太广,请让我知道。我会根据需要编辑它们

  • 简而言之,外部API的连续性(从Shark,现在已删除,通过
    SchemaRDD
    DataFrame
    Dataset[Row]
    )并不意味着内部连续性。内部API经历了重大更改,当前的实现甚至与最初的Spark SQL尝试不相似

    在1.3中没有
    Dataset
    这样的东西,直到2.0,
    DataFrame
    才与
    Dataset
    统一起来

  • 这几乎不是精确的描述(与“强类型”的高度非正式用法相同)。它涉及两个事实:

    • 任意
      的容器(集合),因此不可能进行有意义的静态键入。这并不意味着它是“非类型化的”(
      Any
      是类型层次结构的有效元素),但它只是不向编译器提供有用的信息

    • DataFrame
      DSL级别缺乏类型检查,这与另一点相同,是相当误导的,因为它完全保留了类型系统约束

    所以,从根本上说,相对于一些理想主义的、不存在的系统,它是“非类型化的”,在这个系统中,编译器可以保护所有可能的运行时故障。在更现实的场景中,它区分了所选择的实现和面向类型的变体,如无框架,这反过来又受到JVM作为平台的一些实际限制(是的,我指的是您,宽数据)

  • 如果Dataframe是Dataset[Row],那么为什么要单独定义Dataframe?此外,Dataset的每个操作也应该可以在Dataframe上调用

    这是正确的,但并不意味着相反
    Dataset[Row]
    Dataset
    的一种特殊情况-它通常必须提供至少与
    Dataset[\u]
    一样多的数据,但可以提供更多。事实就是这样

    此外,与专门的
    DataFrame
    操作相比,它是保持向后兼容性的“特例”,特别是当“强类型”变体不太流行,并且通常效率较低时

  • 简而言之,外部API的连续性(从Shark,现在已删除,通过
    SchemaRDD
    DataFrame
    Dataset[Row]
    )并不意味着内部连续性。内部API经历了重大更改,当前的实现甚至与最初的Spark SQL尝试不相似

    在1.3中没有
    Dataset
    这样的东西,直到2.0,
    DataFrame
    才与
    Dataset
    统一起来

  • 这几乎不是精确的描述(与“强类型”的高度非正式用法相同)。它涉及两个事实:

    • 任意
      的容器(集合),因此不可能进行有意义的静态键入。这并不意味着它是“非类型化的”(
      Any
      是类型层次结构的有效元素),但它只是不向编译器提供有用的信息

    • DataFrame
      DSL级别缺乏类型检查,这与另一点相同,是相当误导的,因为它完全保留了类型系统约束

    所以,从根本上说,相对于一些理想主义的、不存在的系统,它是“非类型化的”,在这个系统中,编译器可以保护所有可能的运行时故障。在更现实的场景中,它区分了所选择的实现和面向类型的变体,如无框架,这反过来又受到JVM作为平台的一些实际限制(是的,我指的是您,宽数据)

  • 如果Dataframe是Dataset[Row],那么为什么要单独定义Dataframe?此外,Dataset的每个操作也应该可以在Dataframe上调用

    这是正确的,但并不意味着相反
    Dataset[Row]
    Dataset
    的一种特殊情况-它通常必须提供至少与
    Dataset[\u]
    一样多的数据,但可以提供更多。事实就是这样

    此外,与专门的
    DataFrame
    操作相比,它是保持向后兼容性的“特例”,特别是当“强类型”变体不太流行,并且通常效率较低时


  • 谁投了反对票,你能解释这个问题出了什么问题吗?谁投了反对票,你能解释这个问题出了什么问题吗?