小编PyR*_*der的帖子

Spark动态框架显示方法无济于事

因此,我正在使用AWS Glue自动生成的代码从S3读取csv文件,并将其通过JDBC连接写入表中。看起来很简单,Job成功运行,没有任何错误,但是它什么也没写。当我检查Glue Spark动态框架时,它会显示所有行(使用.count())。但是,当对其执行.show()时,不会产生任何结果。

.printSchema()工作正常。尝试在使用.show()时记录错误,但没有错误或未打印任何内容。使用.toDF及其有效的show方法将DynamicFrame转换为数据帧。我以为文件有问题,试图缩小到某些列。但是即使文件中只有2列,也是一样。用双引号清楚标记字符串,仍然没有成功。

我们有需要从Glue配置中选择的诸如JDBC连接之类的东西。我猜常规的Spark数据框架无法做到。因此需要动态框架。

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue.dynamicframe import DynamicFrame
import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

glueContext = GlueContext(SparkContext.getOrCreate())
spark = glueContext.spark_session

datasource0 = glueContext.create_dynamic_frame.from_options('s3', {'paths': ['s3://bucket/file.csv']}, 'csv', format_options={'withHeader': True,'skipFirst': True,'quoteChar':'"','escaper':'\\'})

datasource0.printSchema()
datasource0.show(5)
Run Code Online (Sandbox Code Playgroud)

输出量

root
|-- ORDERID: string
|-- EVENTTIMEUTC: string
Run Code Online (Sandbox Code Playgroud)

这是转换为常规数据帧所产生的结果。

datasource0.toDF().show()
Run Code Online (Sandbox Code Playgroud)

输出量

+-------+-----------------+
|ORDERID|     EVENTTIMEUTC|
+-------+-----------------+
|      2| "1/13/2018 7:50"|
|      3| "1/13/2018 7:50"|
|      4| "1/13/2018 …
Run Code Online (Sandbox Code Playgroud)

python apache-spark-sql pyspark

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

更改 Alembic 记录器

我们正在使用 alembic 来应用 DB 修订版。我已经配置了连接并且它按预期工作,只是我无法使用我们的客户记录器。

我们有自己的记录器类(派生自 Python 日志记录),它在整个应用程序中使用,我希望 alembic 使用它而不是默认值。

有什么办法可以将我们类的记录器对象传递给它吗?我希望它使用自定义记录器中定义的格式和处理程序打印自己的日志。

我试过,

环境文件

from sqlalchemy import engine_from_config
from sqlalchemy import pool

from alembic import context

from tools.logger import Logger

# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
config = context.config

# Interpret the config file for Python logging.
# This line sets up loggers basically.
if config.attributes.get('configure_logger', True):
    fileConfig(config.config_file_name)
logger = Logger('alembic.env')
Run Code Online (Sandbox Code Playgroud)

我的剧本

self.alembic_cfg = alembic_config(self.alembic_ini_path, attributes={'configure_logger': False}) …
Run Code Online (Sandbox Code Playgroud)

python logging sqlalchemy alembic flask-migrate

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

带有元组的字典放入数据框中

我有一个 python 字典,其中键作为日期,值作为元组,如下所示。

dct = {'01/24/2017 01:10:23.1230':('a',12),
        '12/25/2016 10:12:45.128':('b',23),
        '11/16/2016 09:39:55.459':('c',45),
        '01/12/2017 15:55:20.783':('d',34)}
Run Code Online (Sandbox Code Playgroud)

想要将其写入具有常量(userid)的数据帧中,如下所示。

   userid   Date                            value1                value2
0  123     '01/24/2017 01:10:23.1230'        a                     12
1  123     '12/25/2016 10:12:45.128'         b                     23
2  123     '11/16/2016 09:39:55.459'         c                     45
3  123     '01/12/2017 15:55:20.783'         d                     34
Run Code Online (Sandbox Code Playgroud)

尝试将字典转换为列表或 numpy 数组以写入 Dataframe,但字典中的元组,我无法将它们分开。有任何想法吗?

python dictionary numpy dataframe pandas

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

Anaconda从其他环境导入软件包

我从另一台机器导入了anaconda环境。我想将导入环境中的软件包安装到根目录中,或者将导入环境设置为默认环境。有什么方法可以1.将所有软件包从一个环境导入到另一个环境?或2.使用非根环境作为默认环境?

注意:两种环境都适用于python 2.7。

python anaconda conda

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

将熊猫系列时间戳转换为唯一日期列表

我在 Pandas 数据框中有一列时间戳格式,并希望将唯一日期(无时间)提取到列表中。我试过以下方法并不奏效,

1. dates =  datetime.datetime(df['EventTime'].tolist()).date()
2. dates =  pd.to_datetime(df['EventTime']).date().tolist()
3. dates =  pd.to_datetime(df['EventTime']).tolist().date()
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

python datetime list pandas

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

熊猫:附条件的数据框

所以我有这个数据框(如下所示),我试图通过将其复制到另一个df中来加入自身。加盟条件如下;加盟条件:

  1. 相同的PERSONID和Badge_ID
  2. 但是不同的SITE_ID1
  3. 两行之间的时间差应少于48小时。

期待中

PERSONID    Badge_ID    Reader_ID1_x    SITE_ID1_x  EVENT_TS1_x         Reader_ID1_y    SITE_ID1_x  EVENT_TS1_y
2553-AMAGID 4229        141                 99          2/1/2016 3:26   145                 97          2/1/2016 3:29
2553-AMAGID 4229        248                 99          2/1/2016 3:26   145                 97          2/1/2016 3:29
2553-AMAGID 4229        145                 97          2/1/2016 3:29   251                 99          2/1/2016 3:29
2553-AMAGID 4229        145                 97          2/1/2016 3:29   291                 99          2/1/2016 3:29
Run Code Online (Sandbox Code Playgroud)

这是我很累的事情,请复制df,然后按如下所示的条件过滤每个df,然后再次将它们重新加入。但是以下条件不起作用:(我在读入df之前尝试了SQL中的此过滤器,但是对于600k +行,带有索引的事件,这太慢了。

df1 = df1[(df1['Badge_ID']==df2['Badge_ID']) and (df1['SITE_ID1']!=df2['SITE_ID1']) and ((df1['EVENT_TS1']-df2['EVENT_TS1'])<=datetime.timedelta(hours=event_time_diff))]

PERSONID    Badge_ID    Reader_ID1  SITE_ID1              EVENT_TS1
2553-AMAGID     4229    141             99          2/1/2016 3:26:10 AM
2553-AMAGID     4229    248             99          2/1/2016 3:26:10 …
Run Code Online (Sandbox Code Playgroud)

python join conditional-statements dataframe pandas

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

Cython 编译错误“不是有效的模块名称”

我试图在 Windows 上编译 Cython 文件 (.pyx),这是我刚从 .py 保存的文件。这是我的项目目录路径。

c:\..\Project\App\Analyzer\
_init_.py
Few_other_files.py
consolidated_loop_C.pyx
cl_setup.py
Run Code Online (Sandbox Code Playgroud)

这是我的 cl_setup.py

from Cython.Build import cythonize
try:
    from setuptools import setup
    from setuptools import Extension
except ImportError:
    from distutils.core import setup
    from distutils.extension import Extension


setup(
    name = "Consolidated Loop",
    ext_modules = cythonize("consolidated_loop_C.pyx")
)
Run Code Online (Sandbox Code Playgroud)

我正在使用以下语句在同一文件夹中进行编译。

python cl_setup.py build_ext --inplace
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误。我的猜测是我缺少 cythonize() 的某些参数,试图在没有任何运气的情况下进行研究。

在此处输入图片说明

python compilation cython

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