-4
我正在使用spark 1.6.1版本。我有要求在循環中執行數據幀。Spark(Scala)在for循環內執行數據幀
for (i <- List ('a','b')){
val i = sqlContext.sql("SELECT i, col1, col2 FROM DF1")}
我想被兩次(i = a
和i = b
)執行該數據幀。
我正在使用spark 1.6.1版本。我有要求在循環中執行數據幀。Spark(Scala)在for循環內執行數據幀
for (i <- List ('a','b')){
val i = sqlContext.sql("SELECT i, col1, col2 FROM DF1")}
我想被兩次(i = a
和i = b
)執行該數據幀。
你的代碼幾乎是正確的。 除了兩件事情:
i
在for
循環已被使用,所以如果你想使用的i
值在一個字符串,用String插值val i =
所以,你的代碼應該是這樣的:
for (i <- List ('a','b')) {
val df = sqlContext.sql(s"SELECT $i, col1, col2 FROM DF1")
df.show()
}
編輯:
您可以用.map
然後.reduceLeft
做到這一點:
// All your dataframes
val dfs = Seq('a','b').map { i =>
sqlContext.sql(s"SELECT $i, col1, col2 FROM DF1")
}
// Then you can reduce your dataframes into one
val unionDF = dfs.reduceLeft((dfa, dfb) =>
dfa.unionAll(dfb)
)
其實我需要不同的dataframes(在這種情況下2,a和b)。 假設如果DF1包含以下數據 - COL1,COL2 1,A 2,B 然後數據幀** A **應包含: - 一個 ,1,A 一個,2,B 和數據幀** b **應該包含: - b,1,A b,2,B 我必須創建30個奇怪類似的數據幀,然後將它們全部合併。 – XEngineer
我在你的精確度之後編輯了我的答案 –
完美!現在正在工作。 我做的一點小小的調整是** s「$ {'」'} $ i $ {'「'}」**以容納字符串的引號。 – XEngineer