오픈 소스 프로젝트 (bquery)의 경우 Python 2.7에서 완벽하게 작동하는 cython 코드와 관련된 문제가 발생하지만 Python 3.x에서는 오류가 발생합니다. 전체 코드는 다음을 참조하십시오. https://github.com/visualfabriq/bquery/pull/66Python3의 Cython 바이트 오류
그러나 아이디어를 얻으려면 : 코드의 개념은 그룹화의 각 요소에 대해 고유 한/고유 한 값을 세는 것입니다. 나는 그것들이 유일하다는 것을 확인하기 위해 두 값의 해쉬 체크를 만든다. (그렇지 않으면 그룹당 해시 테이블이 필요하다. 많은 경우에 더 효율적 일지 모르지만 여기에는 기본 기술이 없다. 값을 통해 실행하고 싶지 않다. 여러 번). 값을 고유하게 만들기 위해 중간에 분리 기호가있는 문자열을 만든 다음 해시 테이블을 확인합니다. 여태까지는 그런대로 잘됐다! Python2에서 완벽한 결과를 보여 주며 합리적으로 빠릅니다. 하지만 파이썬 3에서는 오류가 발생합니다.
이
코드입니다 :cdef
kh_str_t * table
char * element_1
char * element_2
char * element_3
int ret, size_1, size_2, size_3
v = in_buffer[i]
# index
size_1 = len(bytes(current_index)) + 1
element_1 = < char * > malloc(size_1)
strcpy(element_1, bytes(current_index))
# value
size_2 = len(str(v)) + 1
element_2 = < char * > malloc(size_2)
strcpy(element_2, bytes(v))
# combination
size_3 = size_1 + size_2 + 2
element_3 = < char * > malloc(size_3)
strcpy(element_3, element_1 + '|' + element_2)
# hash check
k = kh_get_str(table, element_3)
if k == table.n_buckets:
# first save the new element
k = kh_put_str(table, element_3, & ret)
# then up the amount of values found
out_buffer[current_index] += 1
그리고 이것은 오류입니다 :
======================================================================
ERROR: test_groupby_08: Groupby's type 'count_distinct'
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/carst/venv3/lib/python3.5/site-packages/nose/case.py", line 198, in runTest
self.test(*self.arg)
File "/home/carst/PycharmProjects/bquery/bquery/tests/test_ctable.py", line 516, in test_groupby_08
result_bcolz = fact_bcolz.groupby(groupby_cols, agg_list)
File "/home/carst/PycharmProjects/bquery/bquery/ctable.py", line 226, in groupby
bool_arr=bool_arr)
File "/home/carst/PycharmProjects/bquery/bquery/ctable.py", line 161, in aggregate_groups
raise e
File "/home/carst/PycharmProjects/bquery/bquery/ctable.py", line 155, in aggregate_groups
agg_op)
File "bquery/ctable_ext.pyx", line 452, in bquery.ctable_ext.__pyx_fuse_2_0aggregate (bquery/ctable_ext.c:27585)
cpdef aggregate(carray ca_input, carray ca_factor,
File "bquery/ctable_ext.pyx", line 653, in bquery.ctable_ext.aggregate (bquery/ctable_ext.c:27107)
strcpy(element_2, bytes(v))
TypeError: 'float' object is not iterable
나는 매우 분명 뭔가를 내려다해야하지만, 내가 누락 모르겠어요. 어떤 안내 또는 도움도 매우 감사하게 될 것입니다 !!!
는 Python2.X bytes
에서 BR
Carst
내가 키스 수 당신! 여전히 재생중인 것은 "element_1 + '|'입니다. + element_2 "부분에서"str에 바이트를 연결할 수 없습니다 "오류가 발생합니다. 그러나 그것을 b '|' 어느 쪽도 작동하지 않습니다. 몇 가지 대안을 찾고 있습니다. – Carst
그리고 임시 ('|'.encode() 값으로 구분 기호를 붙임으로써 고쳤습니다.) Sergei! – Carst
다행입니다! 오래 전 비슷한 오류로 고생했습니다. :) –