我最近开始发现 Databricks 并面临需要删除增量表的某个列的情况。当我使用 PostgreSQL 时,它就像
ALTER TABLE main.metrics_table
DROP COLUMN metric_1;
Run Code Online (Sandbox Code Playgroud)
我正在查看有关 DELETE 的Databricks文档,但它仅涵盖DELETE the rows that match a predicate.
我还找到了关于 DROP 数据库、DROP 函数和 DROP 表的文档,但绝对没有关于如何从增量表中删除列的内容。我在这里缺少什么?是否有从增量表中删除列的标准方法?
我试图在标准的JUnit测试中测试这个类,但是,我正在使用Schedulers.io()挂起NullPointerException.Schedulers.io()可以被嘲笑吗?
这是一个Android应用程序,我试图使用travis-ci进行持续集成以及用于报告覆盖率的coveralls.io来完全覆盖代码.
要测试的类:
public class GetLiveStreamsList extends UseCase {
private final String filename;
private final ContentRepository contentRepository;
public GetLiveStreamsList( final String filename, final ContentRepository contentRepository, ThreadExecutor threadExecutor, PostExecutionThread postExecutionThread ) {
super( threadExecutor, postExecutionThread );
this.filename = filename;
this.contentRepository = contentRepository;
}
@Override
protected Observable buildUseCaseObservable() {
Action1<List<LiveStreamInfo>> onNextAction = new Action1<List<LiveStreamInfo>>() {
@Override
public void call( List<LiveStreamInfo> liveStreamInfos ) {
try {
Thread.sleep( 5000 );
} catch( InterruptedException e ) { }
}
};
return this.contentRepository.liveStreamInfos( this.filename )
.repeat( …Run Code Online (Sandbox Code Playgroud) 我在 Databricks delta 中有一个表,它由transaction_date. 我想将分区列更改为view_date. 我尝试删除该表,然后使用PARTITIONED BY (view_date).
然而,我的尝试失败了,因为实际文件驻留在 S3 中,即使我删除了一个 hive 表,分区也保持不变。有没有办法更改现有 Delta 表的分区?或者唯一的解决方案是删除实际数据并使用新指示的分区列重新加载它?
在python中安装delta模块的正确方法是什么?
在示例中,他们导入模块
from delta.tables import *
但我没有找到在我的虚拟环境中安装模块的正确方法
目前我正在使用这个火花参数 -
"spark.jars.packages": "io.delta:delta-core_2.11:0.5.0"
我在 delta 表上的 readStream 中遇到问题。
什么是预期的,参考以下链接 https://docs.databricks.com/delta/delta-streaming.html#delta-table-as-a-stream-source Ex:
spark.readStream.format("delta").table("events") -- As expected, should work fine
Run Code Online (Sandbox Code Playgroud)
问题,我已经通过以下方式尝试了相同的方法:
df.write.format("delta").saveAsTable("deltatable") -- Saved the Dataframe as a delta table
spark.readStream.format("delta").table("deltatable") -- Called readStream
Run Code Online (Sandbox Code Playgroud)
错误:
Traceback (most recent call last):
File "<input>", line 1, in <module>
AttributeError: 'DataStreamReader' object has no attribute 'table'
Run Code Online (Sandbox Code Playgroud)
注意:我在 localhost 中运行它,使用 pycharm IDE,安装了最新版本的 pyspark,spark 版本 = 2.4.5,Scala 版本 2.11.12
我正在尝试删除使用 writestream 创建的 Delta Lake 表。我尝试删除表但失败
#table created as
df.writestream().outputmode("append").format("delta").start("/mnt/mytable")
#attempt to drop table
spark.sql("drop table '/mnt/mytable'")
Run Code Online (Sandbox Code Playgroud) 如何在 Databricks 中删除 Delta 表?我在文档中找不到任何信息...也许唯一的解决方案是使用魔术命令或 dbutils 删除文件夹“delta”中的文件:
%fs rm -r delta/mytable?
Run Code Online (Sandbox Code Playgroud)
编辑:
为了澄清起见,我在这里放了一个非常基本的例子。
例子:
#create dataframe...
from pyspark.sql.types import *
cSchema = StructType([StructField("items", StringType())\
,StructField("number", IntegerType())])
test_list = [['furniture', 1], ['games', 3]]
df = spark.createDataFrame(test_list,schema=cSchema)
Run Code Online (Sandbox Code Playgroud)
并将其保存在 Delta 表中
df.write.format("delta").mode("overwrite").save("/delta/test_table")
Run Code Online (Sandbox Code Playgroud)
然后,如果我尝试删除它.. drop table 或类似操作是不可能的
%SQL
DROP TABLE 'delta.test_table'
Run Code Online (Sandbox Code Playgroud)
没有其他选项,如删除表'delta/test_table'等,等等......
我想更改 Databricks Delta 表的列名。
所以我做了以下事情:
// Read old table data
val old_data_DF = spark.read.format("delta")
.load("dbfs:/mnt/main/sales")
// Created a new DF with a renamed column
val new_data_DF = old_data_DF
.withColumnRenamed("column_a", "metric1")
.select("*")
// Dropped and recereated the Delta files location
dbutils.fs.rm("dbfs:/mnt/main/sales", true)
dbutils.fs.mkdirs("dbfs:/mnt/main/sales")
// Trying to write the new DF to the location
new_data_DF.write
.format("delta")
.partitionBy("sale_date_partition")
.save("dbfs:/mnt/main/sales")
Run Code Online (Sandbox Code Playgroud)
在这里,我在写入 Delta 时的最后一步出现错误:
java.io.FileNotFoundException: dbfs:/mnt/main/sales/sale_date_partition=2019-04-29/part-00000-769.c000.snappy.parquet
A file referenced in the transaction log cannot be found. This occurs when data has been manually deleted from …Run Code Online (Sandbox Code Playgroud) 不用说,我是 Spark DataBricks 和 Delta 的新手。
我正在尝试使用 %sql 从简单的 csv 创建一个增量表,其中第一行是标题行。不幸的是,我似乎无法获得初始 CREATE TABLE 来识别 CSV 中的标题列(请注意,我一直在使用 DataBricks 快速入门作为指南 - https://docs.databricks.com/delta/quick -start.html)
我在 Databricks 笔记本中得到的代码是
%sql
CREATE TABLE people
USING delta
LOCATION '/dbfs/mnt/mntdata/DimTransform/People.csv'
Run Code Online (Sandbox Code Playgroud)
我尝试使用 TBLPROPERTIES ("headers" = "true") 但没有成功 - 见下文
%sql
CREATE TABLE people
USING delta
TBLPROPERTIES ("headers" = "true")
AS SELECT *
FROM csv.'/mnt/mntdata/DimTransform/People.csv'
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,csv 数据都会加载到表中,但标题行仅作为第一个标准行包含在数据中。
从 csv 加载时,我如何让这个 %sql CREATE TABLE 将第一个/标题行识别为标题?
谢谢
delta-lake ×8
databricks ×7
apache-spark ×3
pyspark ×2
android ×1
junit ×1
mockito ×1
rx-java ×1
scala ×1
sql ×1
unit-testing ×1