如何在空的python数组中获取dataFrame数组值

时间:2018-10-26 11:35:12

标签: python arrays dataframe pyspark

我正在使用databricks dataframe(pyspark)

我有一个数据框,其中包含一个带有字符串值的数组。

我需要使用df值与我拥有的python数组中的值进行组装。

我想要的是将df值放入这样的python数组中:

listArray = []

listArray.append(dataframeArrayValue)

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

我得到的问题是它可以正常工作,但是由于某些原因,我无法使用添加到新数组list(listArray)的字符串值。

我的概念是我要建立一个URL,在这里我需要使用SQL来获取该URL的开始信息。第一部分是我放入df数组的内容。对于网址的最后一部分,我将其存储在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 :(得分:1)

尝试此步骤,

  • 您可以使用explode()从该string获取一个array。然后,
  • 收集()list
  • string中提取Row部分,
  • split(),用逗号(“,”)。
  • 最后,使用

首次导入 explode()

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     |
+-----------------------+-----------+

从DataFrame'df'中选择列nameOffjdbc

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值收集到列表中。

有关更多信息,请参阅: