小编Shi*_*kou的帖子

在 Spark Structured Streaming 中外部连接两个数据集(不是数据帧)

我有一些代码将两个流DataFrames和输出连接到控制台。

val dataFrame1 =
  df1Input.withWatermark("timestamp", "40 seconds").as("A")

val dataFrame2 =
  df2Input.withWatermark("timestamp", "40 seconds").as("B")

val finalDF: DataFrame = dataFrame1.join(dataFrame2,
      expr(
        "A.id = B.id" +
          " AND " +
          "B.timestamp >= A.timestamp " +
          " AND " +
          "B.timestamp <= A.timestamp + interval 1 hour")
      , joinType = "leftOuter")
finalDF.writeStream.format("console").start().awaitTermination()
Run Code Online (Sandbox Code Playgroud)

我现在想要的是重构这部分以使用Datasets,这样我就可以进行一些compile-time检查。

所以我尝试的非常简单:

val finalDS: Dataset[(A,B)] = dataFrame1.as[A].joinWith(dataFrame2.as[B],
      expr(
        "A.id = B.id" +
          " AND " +
          "B.timestamp >= A.timestamp " +
          " AND " +
          "B.timestamp …
Run Code Online (Sandbox Code Playgroud)

scala apache-spark apache-spark-sql spark-structured-streaming

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

如何使用Impala读取包含复杂类型的Hive视图?

我有一些基于case classes处理和建模的数据,类case class中也可以有其他es,所以最终的表有复杂的数据struct,,array。使用案例类,我使用 .hive 将数据保存在配置单元中dataframe.saveAsTextFile(path)

这些数据有时会发生变化或需要具有不同的模型,因此对于每次迭代,我在表名称中使用后缀(some_data_v01、some_data_v03 等)。

我还使用 Impala 按计划在这些表上运行查询,因此为了不在每次保存新表时修改查询,我想使用一个在更改模型时始终更新的视图。

问题是我无法使用 Impala 创建view,因为表中数据的复杂性(嵌套复杂类型)。除了扩展复杂类型的大量工作之外,我还希望保留这些类型(大量嵌套、连接数组时的数据重复)。

一种解决方案是使用 Hive 创建视图,如下所示

create view some_data as select * from some_data_v01;
Run Code Online (Sandbox Code Playgroud)

但如果我这样做,当我想使用 Impala 的表时,

select * from some_data;
Run Code Online (Sandbox Code Playgroud)

甚至一些简单的东西,比如

select some_value_not_nested, struct_type.some_int, struct_type.some_other_int from some_data;
Run Code Online (Sandbox Code Playgroud)

错误如下:

AnalysisException:选择列表中的 Expr 'some_data_v01.struct_type' 返回复杂类型 'STRUCT< some_int:INT、some_other_int:INT、nested_struct:STRUCT<nested_int:INT、nested_other_int:INT>、last_int:INT>'。选择列表中只允许使用标量类型。

有什么方法可以访问此视图,或以其他方式创建它以使其工作?

hive impala apache-spark

6
推荐指数
0
解决办法
1169
查看次数