Попробуйте это,
- Вы можете использовать
explode()
, чтобы получить string
от этого array
. Тогда,
- collect () as
list
,
- Извлечение
string
части из Row
,
split()
через запятую (",").
- Наконец, используйте его .
Первый импорт взорваться () ,
from pyspark.sql.functions import explode
Предполагая ваш контекст в DataFrame "df"
columns = ['nameOffjdbc', 'some_column']
rows = [
(['/file/path.something1'], 'value1'),
(['/file/path.something2'], 'value2')
]
df = spark.createDataFrame(rows, columns)
df.show(2, False)
+-----------------------+-----------+
|nameOffjdbc |some_column|
+-----------------------+-----------+
|[/file/path.something1]|value1 |
|[/file/path.something2]|value2 |
+-----------------------+-----------+
Выберите столбец nameOffjdbc
из фрейма данных 'df'
dfArray = df.select('nameOffjdbc')
print(dfArray)
DataFrame[nameOffjdbc: array<string>]
взорвать колонну nameOffjdbc
dfArray = dfArray.withColumn('nameOffjdbc', explode('nameOffjdbc'))
dfArray.show(2, False)
+---------------------+
|nameOffjdbc |
+---------------------+
|/file/path.something1|
|/file/path.something2|
+---------------------+
Теперь соберите его в newDfArray (это список Python, который вам нужен).
newDfArray = dfArray.collect()
print(newDfArray)
[Row(nameOffjdbc=u'/file/path.something1'),
Row(nameOffjdbc=u'/file/path.something2')]
Так как он (будет) в формате [Row(column)=u'value']
. Нам нужно получить часть value (string)
. следовательно,
pyList = ",".join(str('{0}'.format(value.nameOffjdbc)) for value in newDfArray)
print(pyList, type(pyList))
('/file/path.something1,/file/path.something2', <type 'str'>)
Разделите значение запятой ",", что создаст list
из string
.
pyList = pyList.split(',')
print(pyList, type(pyList))
(['/file/path.something1', '/file/path.something2'], <type 'list'>)
Используйте это
print(pyList[0])
/file/path.something1
print(pyList[1])
/file/path.something2
Если вы хотите зациклить
for items in pyList:
print(items)
/file/path.something1
/file/path.something2
В скорлупе ореха следующий код - все, что вам нужно.
columns = ['nameOffjdbc', 'some_column']
rows = [
(['/file/path.something1'], 'value1'),
(['/file/path.something2'], 'value2')
]
df = spark.createDataFrame(rows, columns)
dfArray = df.select('nameOffjdbc')
dfArray = dfArray.withColumn('nameOffjdbc', explode('nameOffjdbc')).collect()
pyList = ",".join(str('{0}'.format(value.nameOffjdbc)) for value in dfArray).split(',')
ПРИМЕЧАНИЕ: collect () всегда собирает значения DataFrame в список.
Для получения дополнительной информации см .: