我有一個關於數據框的基本問題,並添加了一個應該包含嵌套列表的列。這是基本的問題:Pyspark/Dataframe:添加將列表嵌套列表作爲嵌套列表的新列
b = [[['url.de'],['name']],[['url2.de'],['name2']]]
a = sc.parallelize(b)
a = a.map(lambda p: Row(URL=p[0],name=p[1]))
df = sqlContext.createDataFrame(a)
list1 = [[['a','s', 'o'],['hallo','ti']],[['a','s', 'o'],['hallo','ti']]]
c = [b[0] + [list1[0]],b[1] + [list1[1]]]
#Output looks like this:
[[['url.de'], ['name'], [['a', 's', 'o'], ['hallo', 'ti']]],
[['url2.de'], ['name2'], [['a', 's', 'o'], ['hallo', 'ti']]]]
創建從這個輸出一個新的數據幀,我正嘗試建立一個新的模式:
schema = df.withColumn('NewColumn',array(lit("10"))).schema
然後我用它來創建新的數據框:
df = sqlContext.createDataFrame(c,schema)
df.map(lambda x: x).collect()
#Output
[Row(URL=[u'url.de'], name=[u'name'], NewColumn=[u'[a, s, o]', u'[hallo, ti]']),
Row(URL=[u'url2.de'], name=[u'name2'], NewColumn=[u'[a, s, o]', u'[hallo, ti]'])]
現在的問題是,嵌套列表被轉換成有兩個unicode條目的列表,而不是保持原始格式。
我認爲這是由於我對新列「... array(lit(」10「))」的定義。
爲了保持原始格式,我必須使用什麼?
DF [ 'NewColumn'] astype可以通過顯式定義模式做到這一點(str).values從列值中刪除unicode。 – Anup
不起作用:「TypeError:unexpected type:」。而我不想要一個字符串作爲結果我想要嵌套列表作爲結果 –
mgruber