小编Dat*_*ice的帖子

尝试访问 Azure Databricks 中的 Azure DBFS 文件系统时出现装载错误

我能够建立与 Databricks FileStore 的连接DBFS并访问文件存储。

使用 Pyspark 读取、写入和转换数据是可能的,但是当我尝试使用本地 Python API(例如pathlibOS模块)时,我无法通过 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)

python azure databricks azure-databricks

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

将轮班数据(开始和结束时间)分解为每小时数据

我有一个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)

python pandas

7
推荐指数
1
解决办法
108
查看次数

使用 Databricks 中的 PySpark 在 Azure DataLake 中使用 partitionBy 和覆盖策略

我在 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)

现在,如果我单独使用此命令,它将覆盖目标分区中的任何现有数据

所以 …

python azure apache-spark apache-spark-sql databricks

7
推荐指数
1
解决办法
6462
查看次数

融化列并为日期列中的每一行添加 20 分钟

我正在尝试使用此数据框(在此示例中为 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 来做到这一点,但我很难做到。请帮我解决这个问题..... 谢谢!

python dataframe pandas

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

如何根据 Pandas DataFrame 中其他列的值创建新列

我是编程和 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" = …

python python-3.x pandas

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

删除所有符合正则表达式条件的行

试图自学大熊猫..并与不同的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)

但这返回了一切,是否有确定的处理此类问题的方法?

python regex pandas

5
推荐指数
3
解决办法
953
查看次数

从表中的熊猫数据集打印 3 列

说我有这个数据:

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)

python pandas

5
推荐指数
1
解决办法
142
查看次数

生成最小和最大日期之间的日期范围 Athena presto SQL 序列错误

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)

sql presto amazon-athena trino

5
推荐指数
1
解决办法
6131
查看次数

你能从 Pandas 的日期中提取年份和月份吗

我有一个带有日期列(日期时间类型)的数据框。我可以轻松地提取年份或月份来执行分组,但我找不到从日期中同时提取年份和月份的方法。我需要分析产品在 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,等等。

python plot dataframe pandas

4
推荐指数
2
解决办法
3461
查看次数

使用未定义的键将列表添加到 for 循环中的字典键

我正在整理一些数据到字典中,不知道有没有更好的方法来处理字典

假设我有一个字典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

4
推荐指数
1
解决办法
2310
查看次数