我能够建立与 Databricks FileStore 的连接DBFS
并访问文件存储。
使用 Pyspark 读取、写入和转换数据是可能的,但是当我尝试使用本地 Python API(例如pathlib
或OS
模块)时,我无法通过 DBFS 文件系统的第一级
我可以使用一个神奇的命令:
%fs ls dbfs:\mnt\my_fs\...
哪个工作完美并列出所有子目录?
但如果我这样做,它会作为返回值os.listdir('\dbfs\mnt\my_fs\')
返回['mount.err']
我已经在新集群上进行了测试,结果是相同的
我在 Databricks Runtine 版本 6.1 和 Apache Spark 2.4.4 上使用 Python
有谁能提供建议吗?
连接脚本:
我使用 Databricks CLI 库来存储根据 databricks 文档格式化的凭据:
def initialise_connection(secrets_func):
configs = secrets_func()
# Check if the mount exists
bMountExists = False
for item in dbutils.fs.ls("/mnt/"):
if str(item.name) == r"WFM/":
bMountExists = True
# drop if exists to refresh credentials …
Run Code Online (Sandbox Code Playgroud) 我有一个df,如下所示,它显示一个人何时开始轮班,结束轮班,工作时间和工作日期。
Business_Date Number PayTimeStart PayTimeEnd Hours
0 2019-05-24 1 2019-05-24 11:00:00 2019-05-24 12:15:00 1.250
1 2019-05-24 2 2019-05-24 12:30:00 2019-05-24 13:30:00 1.00
Run Code Online (Sandbox Code Playgroud)
现在我想做的是将其分成小时格式,所以我知道11:00-12:00之间使用了多少小时
因此,在我的脑海中,对于上述情况,我想将11-12之间的1小时放入11:00的垃圾箱中,将剩余的0.25放入下一个12垃圾箱
所以我最终会得到类似
Business Date Time Hour
0 2019-05-24 11:00 1
1 2019-05-24 12:00 0.75
2 2019-05-24 13:00 0.5
Run Code Online (Sandbox Code Playgroud) 我在 Azure 环境中有一个简单的 ETL 过程
blob 存储 > 数据工厂 > 原始数据 > 数据块 > 数据湖策划 > 数据仓库(主 ETL)。
这个项目的数据集不是很大(大约 100 万行 20 列给予或接受)但是我想将它们作为 Parquet 文件在我的数据湖中正确分区。
目前我运行一些简单的逻辑来确定每个文件应该在我的湖中的哪个位置基于业务日历。
文件模糊地看起来像这样
Year Week Data
2019 01 XXX
2019 02 XXX
Run Code Online (Sandbox Code Playgroud)
然后我将给定的文件分区为以下格式,替换存在的数据并为新数据创建新文件夹。
curated ---
dataset --
Year 2019
- Week 01 - file.pq + metadata
- Week 02 - file.pq + metadata
- Week 03 - file.pq + datadata #(pre existing file)
Run Code Online (Sandbox Code Playgroud)
元数据是成功和自动生成的提交。
为此,我在 Pyspark 2.4.3 中使用以下查询
pyspark_dataframe.write.mode('overwrite')\
.partitionBy('Year','Week').parquet('\curated\dataset')
Run Code Online (Sandbox Code Playgroud)
现在,如果我单独使用此命令,它将覆盖目标分区中的任何现有数据
所以 …
我正在尝试使用此数据框(在此示例中为 1 行):
id Date value_now value+20min value+60min value+80min
0 2015-01-11 00:00:01 12 15 18 22
Run Code Online (Sandbox Code Playgroud)
并将其转换为:
id Date Value
0 2015-01-11 00:00:01 12
0 2015-01-11 00:20:01 15
0 2015-01-11 00:40:01 18
0 2015-01-11 01:00:01 22
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我需要更改值以响应列并创建行,我知道我可以使用melt 来做到这一点,但我很难做到。请帮我解决这个问题..... 谢谢!
我是编程和 Pandas 的新手。因此,请不要严格判断。
在此表中,我需要添加一个新列,其中包含从其他列中获取的值。
inp = [{'Date':2003, 'b1':5,'b2':0,'b3':4,'b4':3},{'Date':2003, 'b1':2,'b2':2,'b3':1,'b4':8},{'Date':2004, 'b1':2,'b2':3,'b3':1,'b4':1},{'Date':2004, 'b1':1,'b2':8,'b3':2,'b4':1},{'Date':2005, 'b1':2,'b2':1,'b3':6,'b4':2},{'Date':2006, 'b1':1,'b2':7,'b3':2,'b4':9}]
df = pd.DataFrame(inp)
print (df)
Date b1 b2 b3 b4
0 2003 5 0 4 3
1 2003 2 2 1 8
2 2004 2 3 1 1
3 2004 1 8 2 1
4 2005 2 1 6 2
5 2006 1 7 2 9
Run Code Online (Sandbox Code Playgroud)
即,取决于日期。也就是说,如果 column 的值"Date" == 2003
- 我需要从 column 获取值b1
,如果column的值"Date" = 2004
那么我需要从 column b2
、"Date" = …
试图自学大熊猫..并与不同的dtypes玩耍
我有一个df如下
df = pd.DataFrame({'ID':[0,2,"bike","cake"], 'Course':['Test','Math','Store','History'] })
print(df)
ID Course
0 0 Test
1 2 Math
2 bike Store
3 cake History
Run Code Online (Sandbox Code Playgroud)
ID的dtype当然是一个对象。我想做的是,如果ID中包含字符串,则删除DF中的任何行。
我以为这很简单。
df.ID.filter(regex='[\w]*')
Run Code Online (Sandbox Code Playgroud)
但这返回了一切,是否有确定的处理此类问题的方法?
说我有这个数据:
project: group: sum:
A John 12
A Sam 10
B Sun 4
B Toy 5
B Joy 7
C Sam 11
Run Code Online (Sandbox Code Playgroud)
数据在数据集 frame_main 中。我想按项目总结,所以我做了:
result_main = pd.concat(frame_main).groupby(["project","group"]).sum()
Run Code Online (Sandbox Code Playgroud)
它基本上做我想要的,它总结了第三列并按第一列分组:
project: group: sum:
A John 12
Sam 10
B Sun 4
Toy 5
Joy 7
C Sam 11
Run Code Online (Sandbox Code Playgroud)
但是现在当我尝试使用以下内容打印它时:
print(tabulate(result_main, headers="keys", tablefmt='psql'))
Run Code Online (Sandbox Code Playgroud)
它打印如下:
+---------------------------+-----------------+
| | sum: |
|---------------------------+-----------------|
| ('A', 'John') | 12 |
| ('A', 'Sam') | 10 |
| ('B', 'Sun') | 4 |
| ('B', 'Toy') | …
Run Code Online (Sandbox Code Playgroud) unnest
我试图在 Presto SQL (Athena) 中使用类似于postgressequence
的东西生成一系列日期generate_series
。
我的桌子看起来像
job_name | run_date
A | '2021-08-21'
A | '2021-08-25'
B | '2021-08-07'
B | '2021-08-24'
SELECT d.job_name, d.run_date
FROM (
VALUES
('A', '2021-08-21'), ('A', '2021-08-25'),
('B', '2021-08-07'), ('B', '2021-08-24')
) d(job_name, run_date)
Run Code Online (Sandbox Code Playgroud)
我的目标是输出如下
job_name | run_date
A | 2021-08-21
A | 2021-08-22
A | 2021-08-23
A | 2021-08-24
A | 2021-08-25
B | 2021-08-07
B | 2021-08-08
B | 2021-08-09
B | 2021-08-10
B | 2021-08-11
B | 2021-08-12 …
Run Code Online (Sandbox Code Playgroud) 我有一个带有日期列(日期时间类型)的数据框。我可以轻松地提取年份或月份来执行分组,但我找不到从日期中同时提取年份和月份的方法。我需要分析产品在 1 年期间的表现,并制作一个图表,说明它每个月的表现。当然,我不能只按月分组,因为它会为 2 个不同的年份添加相同的月份,而按年份分组不会产生我想要的结果,因为我需要每月查看性能。
我一直在寻找几种解决方案,但到目前为止都没有奏效。
所以基本上,我现在的日期是这样的
2018-07-20
2018-08-20
2018-08-21
2018-10-11
2019-07-20
2019-08-21
Run Code Online (Sandbox Code Playgroud)
我只想拥有2018-07, 2018-08, 2018-10
,等等。
我正在整理一些数据到字典中,不知道有没有更好的方法来处理字典
假设我有一个字典dict_
,我将它初始化为
dict_ = {}
Run Code Online (Sandbox Code Playgroud)
现在我有一个我想迭代并添加到我的字典中的对象。
for item in iterable:
dict_[key_a] = item.data
Run Code Online (Sandbox Code Playgroud)
如果只有一个 item.data 要添加到键中,这会起作用,但是如果我有一个数组呢?
我知道我可以做到这一点
dict_[key_a] = []
for item in iterable:
dict_[key_a] = [item.data]
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有一种方法可以dict_[key_a] = []
让我的代码更简洁?
使用会dict_['key_a'].append(item.data)
导致错误,这是正确的。
我的预期输出是
print(dict_)
{'key_a' : ['foo','bar']}
Run Code Online (Sandbox Code Playgroud)
祝大家节日快乐。
python ×9
pandas ×6
azure ×2
databricks ×2
dataframe ×2
apache-spark ×1
plot ×1
presto ×1
python-3.x ×1
regex ×1
sql ×1
trino ×1