Pyspark / python中文字符无法识别

时间:2017-05-31 03:51:57

标签: python apache-spark pyspark encode python-unicode

抱歉,我知道这个问题已被多次询问,但我真的找不到可以解决问题的解决方案。

我在python中使用pyspark模块来读取文件:

[('aybh_zw', 'jyaq'),
('������', '�ڶ��綫·�\U000ffd7c�\u0530�ſ�������������'),
('030', 'FF5E84D38B5B48CF97F26B5E6DAB4DD8')]

经过一些数据清理后,我得到两列,所有列都是中文字符。但是,前三个记录如下所示,第一个元组中的元素是列名。

second_cleaned_data = first_cleaned_data.map(lambda s: (s[0].encode('UTF-8), s[1].encode('UTF-8'))

接下来我做了这个转变:

[(b'aybh_zw', b'jyaq'),
(b'\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd',
(b'030', b'FF5E84D38B5B48CF97F26B5E6DAB4DD8')]

但是,数据如下:

[('aybh_zw', 'jyaq'),
('锟斤拷锟斤拷锟斤拷', '锟节讹拷锟界东路锟襟康硷拷园锟脚匡拷锟'),
('030', 'FF5E84D38B5B48CF97F26B5E6DAB4DD8')]

由于某些stackoverflow格式化问题,我省略了第二个元组中的第二个元素。

由于这仍然是不正确的,我接着跟着并得到:

recordkey   ajbh    ajjf    ajlx    ajlx_zw ajly    ajly_zw ajmc    ajzt    
QTIwMTUwNjAwMDFfMzcxNDAwMDE A2015060001 0   2   刑事  1   110指令   张俊杰被盗窃案 202 已立案 212000002   盗窃罪 盗窃罪 371499  经济  2.02E+13    东风路电业局宿舍    6/13/15 7:08    19B2569194BB4471E0530390300A15A6

但是,这是不正确的,因为这些字符不是它们应该是的。

所以有人可以帮我这个吗?我真的不知道该怎么做。 谢谢

csv文件的示例如下:

-- Counter


type CounterMsg
    = Increment
    | Decrement


type alias CounterModel =
    Int


updateCounter : CounterMsg -> CounterModel -> ( CounterModel, Cmd msg )
updateCounter msg model =
    case msg of
        Increment ->
            ( model + 1, Cmd.none )

        Decrement ->
            ( model - 1, Cmd.none )



-- Todo


type TodoMsg
    = AddTodo String


type alias TodoModel =
    List String


updateTodo : TodoMsg -> TodoModel -> ( TodoModel, Cmd msg )
updateTodo msg model =
    case msg of
        AddTodo str ->
            ( str :: model, Cmd.none )



-- unified


type alias Model =
    { counter : CounterModel
    , todos : TodoModel
    }


type Msg
    = Counter CounterMsg
    | Todo TodoMsg


initModel =
    { counter = 0, todos = [] }


update : Msg -> Model -> ( Model, Cmd msg )
update msg model =
    case Debug.log "message" msg of
        Counter countermsg ->
            let
                ( newmodel, cmd ) =
                    updateCounter countermsg model.counter
            in
                ( { model | counter = newmodel }, cmd )

        -- etc...
        _ ->
            ( model, Cmd.none )

0 个答案:

没有答案