我在使用 pysparkSQL 与 delta 表合并 csv 文件时遇到问题。我设法创建 upsert 函数,如果匹配则更新,如果不匹配则插入。
我想将列添加ID到最终的增量表中,并在每次插入数据时递增它。此列标识增量表中的每一行。有什么办法可以把它落实到位吗?
def Merge(dict1, dict2):
res = {**dict1, **dict2}
return res
def create_default_values_dict(correspondance_df,marketplace):
dict_output = {}
for field in get_nan_keys_values(get_mapping_dict(correspondance_df, marketplace)):
dict_output[field] = 'null'
# We want to increment the id row each time we perform an insertion (TODO TODO TODO)
# if field == 'id':
# dict_output['id'] = col('id')+1
# else:
return dict_output
def create_matched_update_dict(mapping, products_table, updates_table):
output = {}
for k,v in mapping.items():
if k == 'source_name':
output['products.source_name'] …Run Code Online (Sandbox Code Playgroud) 我正在尝试重命名 azure databricks 中的数据库,但收到以下错误:
输入“ALTER DATABASE inventory”时没有可行的替代方案
下面是代码:
%sql
use inventory;
ALTER DATABASE inventory MODIFY NAME = new_inventory;
Run Code Online (Sandbox Code Playgroud)
请解释这个错误“在输入'ALTER DATABASE inventory时没有可行的替代方案”的含义以及如何解决它
我有一些文件位于%sh ls,我想将这些文件移动到 databricks 的文件系统中(使它们在 中可见%fs ls)。
%sh ls你们中有人知道和之间有什么区别%fs ls,以及如何在它们之间移动文件吗?
我知道我们可以利用它dbutils.fs.cp来移动已经就位的文件%fs ls。
任何帮助或指示表示赞赏。
我的要求是从十进制值中删除尾随零,我尝试过正则表达式并strip()删除它有效的尾随零,但我们使用正则表达式和 strip 作为字符串数据类型,我想在Col_2不改变精度和小数位数的情况下为十进制。有人可以建议替代方案吗?
样本表:
Col_1:字符串
Col_2:十进制(18,2)
| 列_1 | 列_2 |
|---|---|
| ABC | 2.00 |
| DEF | 2.50 |
| 厦门 | 0.00 |
| 快速恢复时间 | 1.28 |
使用正则表达式的实际结果:
Col_1:字符串
Col_2:字符串
| 列_1 | 列_2 |
|---|---|
| ABC | 2 |
| DEF | 2.5 |
| 厦门 | |
| 快速恢复时间 | 1.28 |
预期结果 :
| 列_1 | 列_2 |
|---|---|
| ABC | 2 |
| DEF | 2.5 |
| 厦门 | 0 |
| 快速恢复时间 | 1.28 |
我有一个具有以下架构的 Spark df:
|-- col1 : string
|-- col2 : string
|-- customer: struct
| |-- smt: string
| |-- attributes: array (nullable = true)
| | |-- element: struct
| | | |-- key: string
| | | |-- value: string
Run Code Online (Sandbox Code Playgroud)
df:
#+-------+-------+---------------------------------------------------------------------------+
#|col1 |col2 |customer |
#+-------+-------+---------------------------------------------------------------------------+
#|col1_XX|col2_XX|"attributes":[[{"key": "A", "value": "123"},{"key": "B", "value": "456"}] |
#+-------+-------+---------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
数组的 json 输入如下所示:
...
"attributes": [
{
"key": "A",
"value": "123"
},
{
"key": "B",
"value": "456"
}
],
Run Code Online (Sandbox Code Playgroud)
我想循环属性数组并获取元素key="B",然后选择相应的 …
我在主题下经历了java中的数据结构Skip list,我发现了以下内容:
在跳过列表中n nodes,对于每个k和i那样,1 ? k ?lg n并且1 ? i ?
n/2k–1? – 1,位置中的节点2k–1· i指向位置中的节点2k–1·(i + 1).这意味着每个第二个节点指向前面两个位置的节点,每四个节点指向前面四个位置的节点,依此类推,如图3.17a所示.这是通过在列表中的节点中具有不同数量的参考字段来实现的:一半节点仅具有一个参考字段,四分之一的节点具有两个参考字段,八分之一的节点具有三个参考字段,因此上.参考字段的数量表示每个节点的级别,级别的数量是maxLevel = ?lg n? + 1.
并且该图是:跳过列表,其中(a)均匀地和(b)不同级别的不均匀节点; (c)清楚显示参考节点的跳过列表.

我不明白数学部分和sktip列表究竟是什么,甚至是节点?
我有一个给定大小的数组,没有使用任何内存分配,如何在其中添加内容?
假设我运行代码,它等待你要输入的内容,你输入"bond",我如何将它附加到数组中?A [10]?
我有两个数据框,我collect_set()在使用后在 agg 中使用groupby。flatMap聚合后生成数组的最佳方法是什么?
schema = ['col1', 'col2', 'col3', 'col4']
a = [[1, [23, 32], [11, 22], [9989]]]
df1 = spark.createDataFrame(a, schema=schema)
b = [[1, [34], [43, 22], [888, 777]]]
df2 = spark.createDataFrame(b, schema=schema)
df = df1.union(
df2
).groupby(
'col1'
).agg(
collect_set('col2').alias('col2'),
collect_set('col3').alias('col3'),
collect_set('col4').alias('col4')
)
df.collect()
Run Code Online (Sandbox Code Playgroud)
我得到这个作为输出:
[Row(col1=1, col2=[[34], [23, 32]], col3=[[11, 22], [43, 22]], col4=[[9989], [888, 777]])]
Run Code Online (Sandbox Code Playgroud)
但是,我想要这个作为输出:
[Row(col1=1, col2=[23, 32, 34], col3=[11, 22, 43], col4=[9989, 888, 777])]
Run Code Online (Sandbox Code Playgroud) 我用来spark.read.parquet()读取镶木地板文件按分区组织的文件夹。f当分区名称以或结尾时,结果将是错误的d。显然,Spark 会将它们解释为数字而不是字符串。我创建了一个最小的测试用例,如下所示来重现该问题。
df = spark.createDataFrame([
('9q', 1),
('3k', 2),
('6f', 3),
('7f', 4),
('7d', 5),
],
schema='foo string, id integer'
)
df.write.partitionBy('foo').parquet('./tmp_parquet', mode='overwrite')
read_back_df = spark.read.parquet('./tmp_parquet')
read_back_df.show()
Run Code Online (Sandbox Code Playgroud)
将会read_back_df是
+---+---+
| id|foo|
+---+---+
| 1| 9q|
| 4|7.0|
| 3|6.0|
| 2| 3k|
| 5|7.0|
+---+---+
Run Code Online (Sandbox Code Playgroud)
注意分区6f/7f/7d变为6.0/7.0/7.0。
Spark版本是2.4.3。
我需要找到一种方法来获取nullpyspark 数据框中具有值的所有行。
例如,我有以下日期范围:
+-------+-------+-------+
| c_00| c_01| c_02|
+-------+-------+-------+
1 | null | 0.141| 0.141|
2 | 0.17| 0.17| 0.17|
3 | 0.25| null| 0.25|
4 | 0.135| 0.135| 0.135|
Run Code Online (Sandbox Code Playgroud)
我想要所有行在null任何列中都有值
+-------+-------+-------+
| c_00| c_01| c_02|
+-------+-------+-------+
1 | null | 0.141| 0.141|
3 | 0.25| null| 0.25|
Run Code Online (Sandbox Code Playgroud) apache-spark ×6
pyspark ×6
databricks ×2
dataframe ×2
append ×1
arrays ×1
c ×1
decimal ×1
delta-lake ×1
filesystems ×1
java ×1
python ×1
skip-lists ×1
trim ×1