Так как я знаю в Кадре данных Spark, который для нескольких столбцов может иметь то же имя как показано в ниже снимка кадра данных:
[
Row(a=107831, f=SparseVector(5, {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0}), a=107831, f=SparseVector(5, {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0})),
Row(a=107831, f=SparseVector(5, {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0}), a=125231, f=SparseVector(5, {0: 0.0, 1: 0.0, 2: 0.0047, 3: 0.0, 4: 0.0043})),
Row(a=107831, f=SparseVector(5, {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0}), a=145831, f=SparseVector(5, {0: 0.0, 1: 0.2356, 2: 0.0036, 3: 0.0, 4: 0.4132})),
Row(a=107831, f=SparseVector(5, {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0}), a=147031, f=SparseVector(5, {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0})),
Row(a=107831, f=SparseVector(5, {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0}), a=149231, f=SparseVector(5, {0: 0.0, 1: 0.0032, 2: 0.2451, 3: 0.0, 4: 0.0042}))
]
Выше результата создается соединением с кадром данных к себе, Вы видите, что существует 4
столбцы с оба два a
и f
.
Проблема, там, когда я пытаюсь сделать больше вычисления с a
столбец, я не могу найти способ выбрать a
, У меня есть попытка df[0]
и df.select('a')
, оба возвратили меня ниже ошибки mesaage:
AnalysisException: Reference 'a' is ambiguous, could be: a#1333L, a#1335L.
Есть ли так или иначе в Spark API, что я могу отличить столбцы от дублированных имен снова? или возможно некоторый способ позволить мне изменить имена столбцов?
Это не могло бы быть лучшим подходом, но если Вы хотите переименовать дублирующиеся столбцы (после того, как соединение), можно сделать настолько использующий эту крошечную функцию.
def rename_duplicate_columns(dataframe):
columns = dataframe.columns
duplicate_column_indices = list(set([columns.index(col) for col in columns if columns.count(col) == 2]))
for index in duplicate_column_indices:
columns[index] = columns[index]+'2'
dataframe = dataframe.toDF(*columns)
return dataframe
Если у Вас есть более сложный вариант использования, чем описанный в ответе Glennie Helles Sindholt, например, у Вас есть другие/небольшие количества имена необъединяющего столбца, которые являются также тем же и хотят отличить их, в то время как выбор лучше использовать псевдонимы, например:
df3 = df1.select("a", "b").alias("left")\
.join(df2.select("a", "b").alias("right"), ["a"])\
.select("left.a", "left.b", "right.b")
df3.columns
['a', 'b', 'b']