Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server Python服务中的大容量Select语句调用Cython方法_Python_Sql Server_Python 3.x_Cython_Sql Server 2017 - Fatal编程技术网

SQL Server Python服务中的大容量Select语句调用Cython方法

SQL Server Python服务中的大容量Select语句调用Cython方法,python,sql-server,python-3.x,cython,sql-server-2017,Python,Sql Server,Python 3.x,Cython,Sql Server 2017,机器学习相关问题:SQL Server 2017 Python服务 错误:内存错误-文件“cyproject\util.pyx”,第10行,在 cyproject.util.json_to_列表(如果我试图选择>7000条记录,就会出现此错误) 我的一个SQL Server数据库表“sample\u data”中有大量记录集 表的架构是 CREATE TABLE [dbo].[sample_data]( [index] [bigint] IDENTITY(0,1) NOT NU

机器学习相关问题:SQL Server 2017 Python服务

错误内存错误-文件“cyproject\util.pyx”,第10行,在 cyproject.util.json_to_列表(如果我试图选择>7000条记录,就会出现此错误)

我的一个SQL Server数据库表“sample\u data”中有大量记录集

表的架构是

CREATE TABLE [dbo].[sample_data](
        [index] [bigint] IDENTITY(0,1) NOT NULL PRIMARY KEY,
        [binarydata] [varbinary](max) NOT NULL,
        [dataset] AS CAST(DECOMPRESS([binarydata]) AS varchar(max))
        [datacount] [int] NOT NULL,
)
二进制数据包含JSON字符串值
COMPRESS(N'[1,2,3,4,5,6]')

样本数据

INSERT INTO [dbo].[sample_data]
           ([binarydata]
           ,[datacount])
     VALUES
           (COMPRESS(N'[1,2,3,4,5,6]')
           , 6)
注意:[dbo].[sample_data]。[dataset]是一个自动计算列,它将 返回[dbo].[sample_data].[binarydata]的解压缩形式。(即:。, N'[1,2,3,4,5,6]')

我编写了一个CYTHON方法来将JSON字符串(即[dbo].[sample_data].[dataset])转换为适当的列表

CYTHON法

def json_to_list(list json_array):
    cdef:
        list result = []
        str item

    for item in json_array:
        result.append(np.array(json.loads(item)))

    return result
我在SQL Server 2017 PYTHON服务中集成了上述CYTHON方法:

示例代码:SQL SERVER脚本(PYTHON服务)

错误:MemoryError-文件“cyproject\util.pyx”,第10行,在 cyproject.util.json_to_列表(如果我尝试 选择>7000条记录)

表中的总记录约为74K,可能会增加。此外,所述表格仅包含压缩数据(表格大小为1.822 GB),未压缩数据大小约>9 GB

在初始执行中,它将整个记录转储到DataFrame,我只获取列值。最后,我将这些值列表传递给CYTHON方法,它返回numpy数组的
列表


我无法处理超过7K条记录,内存出错。请帮助我如何做到这一点。

这个问题与机器学习无关。
-请不要垃圾邮件标签(已删除)。@desertnaut-没有问题。谢谢。您可以尝试确保numpy
dtype
是最小的合适数据类型(例如
np.int16
np.int32
)。您也可以尝试在
json_data
上使用
list.pop
来释放一些内存(但我不知道使用
pop
前后移动会有多高效)
DECLARE @pscript NVARCHAR(MAX);
SET @pscript = N'
# assign SQL Server dataset to df
df = InputDataSet

import cyproject.util

json_array = df.dataset.values

result = cyproject.util.json_to_list(json_array.tolist())
';

DECLARE @sqlscript NVARCHAR(MAX);
SET @sqlscript = N'
  SELECT TOP (7500) 
     [dataset]
  FROM [dbo].[sample_data]';

EXEC sp_execute_external_script
  @language = N'Python',
  @script = @pscript,
  @input_data_1 = @sqlscript