大数据情况下如何排查代码

     2023-04-18     108

关键词:

【中文标题】大数据情况下如何排查代码【英文标题】:How to troubleshoot code in the case of big data 【发布时间】:2014-07-06 07:36:15 【问题描述】:

我正在尝试实现一个表的this python solution to count the number of lines with identical content in the first few columns。这是我的代码:

#count occurrences of reads
import pandas as pd
#pd.options.display.large_repr = 'info'
#pd.set_option('display.max_rows', 100000000)
#pd.set_option('display.width',50000)

import sys
file1 = sys.argv[1]
file2 = file1[:4] + '_multi_nobidir_count.soap'

df = pd.read_csv(file1,sep='\t',header=None)
df.columns = ['v0','v1','v2','v3','v4','v5','v6','v7','v8','v9','v10','v11']
df['v3']=df.groupby(['v0','v1','v2']).transform(sum).v3
df.to_csv(file2,sep='\t',index=False,header=False)

它适用于测试数据(200 行),但当我将其应用于真实数据(2000 万行)时出现以下错误:

Traceback (most recent call last):
  File "count_same_reads.py", line 14, in <module>
    df['v3']=df.groupby(['v0','v1','v2']).transform(sum).v3
  File "/usr/local/lib/python2.7/dist-packages/pandas-0.14.0-py2.7-linux-x86_64.egg/pandas/core/groupby.py", line 2732, in transform
    return self._transform_item_by_item(obj, fast_path)
  File "/usr/local/lib/python2.7/dist-packages/pandas-0.14.0-py2.7-linux-x86_64.egg/pandas/core/groupby.py", line 2799, in _transform_item_by_item
    raise TypeError('Transform function invalid for data types')
TypeError: Transform function invalid for data types

如何进行故障排除,找出我收到此错误的原因?

[编辑] 取消注释 pd.options.pd.set_option 行并没有改变结果。

[EDIT2] 考虑到下面的一些回复,我在我的数据上运行了以下代码以输出第 4 列中没有数字的任何数据行:

#test data type
import sys
file1 = sys.argv[1]

def is_number(s):
    try:
        float(s)
        return True
    except ValueError:
        return False

with open(file1, 'r') as data:
    for row in data:
        a = row.strip().split()[3]
        if is_number(a) == False:
            print row.strip()

这适用于测试数据,其中我将行的第四列值之一从1 更改为e,它只输出包含字母而不是数字的行。我在原始大数据上运行它,但没有返回任何行。

【问题讨论】:

也许只转换v3 列有效:df.v3 = df.groupby(['v0','v1','v2']).v3.transform(sum) 【参考方案1】:

您收到的异常是TypeError,它暗示文件存在问题。但是对于大文件,处理比较的代码总是可能存在例如内存问题。所以,你有两种可能:

文件损坏 代码(您的或pandas 的)已损坏

为了调试它,您可以尝试将您的文件分段输入到您的代码中。在某些时候,您已经隔离了问题。它可能是两者之一:

无论您使用哪 n 行,它都会引发异常(但不是 n-1 行);内存管理或其他东西坏了 可以将问题隔离到数据文件的一行或多行;数据文件损坏

我第二个merlin2011 的猜测:你的文件中有一些意想不到的东西。 pandas 不太可能只记录 200 000 000 条记录。

【讨论】:

谢谢。我尝试检查原始数据以查看我正在计算的列是否包含除数字之外的任何其他内容,但显然它没有...我编辑了 OP 以显示我是如何做到的。但是您认为这足以排除“文件已损坏”选项吗? 不幸的是,事实并非如此。您使用的其他列之一(第 1、2、3 列)中可能有错误数据。另一方面,如果你不缺硬盘空间,告诉 linux 到tail +1234567 mydata.csv | head -n 10000 生成测试文件不会花费那么多时间。 我解决了这个问题,但忘了检查答案。我的数据文件确实坏了:)【参考方案2】:

打开文件/usr/local/lib/python2.7/dist-packages/pandas-0.14.0-py2.7-linux-x86_64.egg/pandas/core/groupby.py,转到第2799行。

就在以下语句之前,在相同的缩进级别中,添加一行以打印违规数据的值。

raise TypeError('Transform function invalid for data types')

现在,在TypeError 被抛出之前,您将知道是什么数据导致了错误。

鉴于您要求和,我推测您的列中有一个非数字值,但我没有您的数据,所以这纯粹是推测。


我快速查看了发生错误的代码区域,在这种情况下,您应该在引发TypeError 之前检查对象obj

for i, col in enumerate(obj):
    try:
        output[col] = self[col].transform(wrapper)
        inds.append(i)
    except Exception:
        pass

if len(output) == 0:  # pragma: no cover
    raise TypeError('Transform function invalid for data types')

【讨论】:

谢谢。你的意思是我应该添加print obj【参考方案3】:

以下是解决此类问题的方法:

创建一个函数来包装操作(这会慢一些,因为它没有被cythonized),但应该能捕捉到你的错误。

def f(x):
    try:
        return x.sum()
    except:
        import pdb; pdb.set_trace()


df['v3']=df.groupby(['v0','v1','v2']).transform(f).v3

【讨论】:

如何在没有日志的情况下删除SQL中表的大数据?

】如何在没有日志的情况下删除SQL中表的大数据?【英文标题】:HowtodeletelargedataoftableinSQLwithoutlog?【发布时间】:2014-06-1320:22:27【问题描述】:我有一个大数据表。这张表有1000万条记录。这个查询的最佳方式是什么DeleteLargeTable... 查看详情

大数据量情况下高效比较两个list

...个for循环删掉一个list中重复的,然后再合并。  如果数据量在千条级别,这个速度还是比较快的。但如果数据量超过20W+(比如大批量的导入数据并对数据进行处理)时,则这块代码执行时间会比较长,非常影响用户体验和程... 查看详情

前端报错时如何排查问题(代码片段)

...代码classPutView(BaseView):defput(self,request):#Django并没有处理PUT数据,不可以使用request.PUT#实际put传过来的数据是在request.body中,而获取到的数据是:b\'name=%E5%8F%82%E6%95%B06&desc=%E5%8F%82%E6%95%B06%E6%8F%8F%E8%BF%B0&value=100866\'#需要导入fromdjang... 查看详情

如何在不更改 max_allowed_pa​​cket 的情况下将大数据插入 MySQL 数据库

】如何在不更改max_allowed_pa​​cket的情况下将大数据插入MySQL数据库【英文标题】:howinsertlargedatatoMySQLdatabasewithoutchangemax_allowed_packet【发布时间】:2012-10-0514:50:30【问题描述】:我的文本大于max_allowed_packet(1MB)为什么我不能用下... 查看详情

大数据问题排查系列-大数据集群开启kerberos认证后hive作业执行失败(代码片段)

大数据问题排查系列-大数据集群开启kerberos认证后HIVE作业执行失败1前言大家好,我是明哥!本文是大数据问题排查系列的kerberos问题排查子序列博文之一,讲述大数据集群开启kerberos安全认证后,hive作业执行失败... 查看详情

如何用小数据集训练神经网络或如何在没有人工干预的情况下制作大数据集?

】如何用小数据集训练神经网络或如何在没有人工干预的情况下制作大数据集?【英文标题】:Howtotraintheneuralnetworkwithsmalldatasetorhowtomakehugedatasetwithouthumanintervention?【发布时间】:2016-03-1101:17:07【问题描述】:我正在尝试使用RNN... 查看详情

大数据线上问题排查系列-hive踩坑记(代码片段)

大数据线上问题排查系列-HIVE踩坑记前言大家好,我是明哥!本片博文是“大数据线上问题排查系列”大类别之一,讲述前段时间我司某产品在某券商遇到的一个问题及解决方案,其背后涉及到hive的一个BUG,在hive3.... 查看详情

大数据时代下,企业如何保障数据安全?

企业中以沟通为中心和以人为中心的一些非关键业务数据,更多是半结构化、非结构化的形式存在的,往往分散存储在应用、文件服务器中,容易形成数据孤岛,使得企业协同办公效率低,还存在安全风险。日常办公中可能会遇... 查看详情

sql数据库性能问题排查

...循环SQL   例子:下面的这种情况,每查出T_t1的一条数据,就会循环查找T_t2中的数据,使表关联的索引失效,造成反应慢。   --错误示范SELECTA,B,(SELECTCFR 查看详情

如何在不修改数据库模式的情况下仅使用 PL/SQL 更新具有大值的 CLOB?

】如何在不修改数据库模式的情况下仅使用PL/SQL更新具有大值的CLOB?【英文标题】:HowdoyouUPDATEaCLOBwithlargevaluesusingonlyPL/SQLwithoutmodifyingtheDBschema?【发布时间】:2014-04-1015:47:04【问题描述】:假设您有一个无法修改的Oracle10g(10.2.0.3... 查看详情

大数据问题排查系列-因hive中元数据与hdfs中实际的数据不一致引起的问题的修复(代码片段)

大数据问题排查系列-因HIVE中元数据与HDFS中实际的数据不一致引起的问题的修复前言大家好,我是明哥!本片博文是“大数据问题排查系列”之一,讲述某HIVESQL作业因为HIVE中的元数据与HDFS中实际的数据不一致引起的... 查看详情

redis排查大key的4种方法,优化必备(代码片段)

...a;在日常Redis的使用中,难免遇到因为key存储了过大的数据而造成请求缓慢甚至阻塞的情况,这个时候就需要排查Redis的 查看详情

记一次大数据跨区域流量排查及修复(代码片段)

...排查就开始了。前言首先附上我们的任务调度架构我们大数据计算使用的是AWS的EMR(ElasticMapReduce)集群,由于AWSEMR天然支持读写S3,并且S3相比较硬盘尤其便宜&#x 查看详情

kubernetes应用问题的通用排查思路-大数据从业者之kubernetes必知必会

...,大家共勉!1技术趋势大背景我们知道,大数据进一步发展的一个趋势,就是大数据和云计算进一步融合(包括在底层更加青睐存储计 查看详情

一次socketexception:connectionreset异常排查

...会产生Connectionreset?长连接中,向server发请求,是先发送数据的,如果连接断开,应该是写数据异常,为什么是读数据异常呢?请求是否发送成功?发送之前有校验连接是否可用吗?http连接池defaultMaxPerRoute什么意思?每个并发... 查看详情

大数据问题排查系列-sparkstandaloneha模式的一个缺陷点与应对方案(代码片段)

大数据问题排查系列-SPARKSTANDALONEHA模式的一个缺陷点与应对方案前言大家好,我是明哥!作为当今离线批处理模式的扛把子,SPARK在绝大多数公司的数据处理平台中都是不可或缺的。而在底层使用的具体资源管理器上&... 查看详情

没有禁ping却ping不通的情况如何排查(代码片段)

客户端ping服务器ping不通分析原因:可能是服务器系统内部防火墙策略对客户端进行了ban设置。解决办法:这里用[$Eth0_IP]表示eth0网卡的IP地址,用[$Server_IP]为服务器的公网IP地址。我们输入命令tcpdump-ieth0host[$Eth0_IP]|grepICMP来进行... 查看详情

问题解决系列:遇到tomcat的假死问题,如何排查问题(代码片段)

(文章目录)问题场景线上,有时候会遇到一种这样的情况:tomcat没有奔溃退出,输出日志也没有异常,但是界面访问就一直卡着。假如遇到这种情况,没错,你遇到了tomcat假死问题了。那么,该怎么排查这个问题呢?这个就是本... 查看详情