小编Vik*_*s J的帖子

Spark Dataframe基于列索引进行选择

如何选择Scala中具有某些索引的数据帧的所有列?

例如,如果一个数据框有100列,我想只提取列(10,12,13,14,15),如何做同样的事情?

下面选择dfdataframe中具有Array colNames中提到的列名的所有列:

df = df.select(colNames.head,colNames.tail: _*)
Run Code Online (Sandbox Code Playgroud)

如果有类似的,colNos数组有

colNos = Array(10,20,25,45)
Run Code Online (Sandbox Code Playgroud)

如何转换上述内容df.select以仅获取特定索引处的列.

scala dataframe apache-spark apache-spark-sql

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

Delta Lake 创建表,其结构与其他表相同

我在位置“/mnt/events-bronze”有一个青铜级三角洲湖表(events_bronze),数据从kafka流式传输到该表。现在我希望能够从该表进行流式传输并使用“foreachBatch”更新到银表(events_silver”。这可以使用青铜表作为源来实现。但是,在初始运行期间,由于 events_silver 不存在,我不断收到错误,说 Delta 表不存在,这是显而易见的。那么我该如何创建与 events_bronze 具有相同结构的 events_silver 呢?我找不到 DDL 来执行相同的操作。

def upsertToDelta(microBatchOutputDF: DataFrame, batchId: Long) {
  DeltaTable.forPath(spark, "/mnt/events-silver").as("silver")
    .merge(
      microBatchOutputDF.as("bronze"),
      "silver.id=bronze.id")
    .whenMatched().updateAll()
    .whenNotMatched().insertAll()
    .execute()
}
 events_bronze
      .writeStream
      .trigger(Trigger.ProcessingTime("120 seconds"))
      .format("delta")
      .foreachBatch(upsertToDelta _)
      .outputMode("update")
      .start()
Run Code Online (Sandbox Code Playgroud)

在初始运行期间,问题是没有为路径“/mnt/events-silver”定义 Delta Lake 表。我不确定如何在第一次运行时创建与“/mnt/events-bronze”具有相同结构的它。

apache-spark databricks spark-structured-streaming delta-lake

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

命令中的Shell变量替换

我怎样才能使下面的命令工作.

export CURDATE=`date +%Y-%m-%d`
curl -XPOST "http://localhost:9200/test/type" \
  -d ' { "AlertType": "IDLE", "@timestamp": $CURDATE }'
Run Code Online (Sandbox Code Playgroud)

我收到错误"原因":"无法识别的令牌'$ CURDATE':期待"我如何在上面的代码中得到正确的变量替换

bash scripting

2
推荐指数
1
解决办法
54
查看次数