Как получить значение массива dataFrame в пустом массиве python - PullRequest
0 голосов
/ 26 октября 2018

Я работаю с блоком данных (pyspark)

У меня есть фрейм данных, который содержит массив со строковым значением.

Мне нужно использовать значение df для сборки со значением из массива python, который у меня есть.

То, что я хочу, это поместить значение df в массив python следующим образом:

listArray = []

listArray.append(dataframeArrayValue)

print(listArray)
outPut:
     [value1, value2, value3]

Проблема, которую я получаю, заключается в том, что она вроде не работает, но по какой-то причине я не могу работать со строковым значением, добавленным в новый список массивов (listArray).

Моя концепция состоит в том, что я собираюсь создать URL, где мне нужно использовать SQL, чтобы получить начальную информацию этого URL. Эта первая часть - то, что я помещаю в массив df. Для последней части URL я храню это в массиве python.

Я хочу перебрать оба массива и поместить результат в пустой массив.

Примерно так:

display(dfList)
outPut:
      [dfValue1, dafValue2, dfValue3]

print(pyList)
      [pyValue1, pyValue2, pyValue3]

Whant to put them together like this:

dfValue1 + pyValue2 etc..

And getting a array like this:

newArrayContainingBoth = []

-- loop with append

результат:

print(newArrayContainingBoth)
outPut:
[dfValue1+pyValue1, dfValue2+pyValue2, dfValue3+pyValue]

Надеюсь, мой вопрос был достаточно ясен

1 Ответ

0 голосов
/ 01 ноября 2018

Попробуйте это,

  • Вы можете использовать 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 в список.

Для получения дополнительной информации см .:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...