我正在使用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]
希望我的问题很清楚
答案 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 = 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(',')
有关更多信息,请参阅: