[英]Read JSON file as Pyspark Dataframe using PySpark?
如何使用 PySpark 讀取以下 JSON 結構以激發數據幀?
我的 JSON 結構
{"results":[{"a":1,"b":2,"c":"name"},{"a":2,"b":5,"c":"foo"}]}
我試過:
df = spark.read.json('simple.json');
我想要輸出 a,b,c 作為列和值作為相應的行。
謝謝。
Json 字符串變量
如果你有json 字符串作為變量,那么你可以做
simple_json = '{"results":[{"a":1,"b":2,"c":"name"},{"a":2,"b":5,"c":"foo"}]}'
rddjson = sc.parallelize([simple_json])
df = sqlContext.read.json(rddjson)
from pyspark.sql import functions as F
df.select(F.explode(df.results).alias('results')).select('results.*').show(truncate=False)
這會給你
+---+---+----+
|a |b |c |
+---+---+----+
|1 |2 |name|
|2 |5 |foo |
+---+---+----+
Json 字符串作為文件中的單獨行(sparkContext 和 sqlContext)
如果您在文件中將 json 字符串作為單獨的行,那么您可以使用 sparkContext 將其讀取到 rdd[string]如上所述,其余過程與上述相同
rddjson = sc.textFile('/home/anahcolus/IdeaProjects/pythonSpark/test.csv')
df = sqlContext.read.json(rddjson)
df.select(F.explode(df['results']).alias('results')).select('results.*').show(truncate=False)
Json 字符串作為文件中的單獨行(僅限 sqlContext)
如果您在文件中將 json 字符串作為單獨的行,那么您只能使用sqlContext
。 但是這個過程很復雜,因為你必須為它創建模式
df = sqlContext.read.text('path to the file')
from pyspark.sql import functions as F
from pyspark.sql import types as T
df = df.select(F.from_json(df.value, T.StructType([T.StructField('results', T.ArrayType(T.StructType([T.StructField('a', T.IntegerType()), T.StructField('b', T.IntegerType()), T.StructField('c', T.StringType())])))])).alias('results'))
df.select(F.explode(df['results.results']).alias('results')).select('results.*').show(truncate=False)
這應該給你與上面相同的結果
我希望答案有幫助
!pip install findspark
!pip install pyspark
import findspark
import pyspark
findspark.init()
sc = pyspark.SparkContext.getOrCreate()
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('abc').getOrCreate()
讓我們生成我們自己的 JSON 數據這樣我們還不必訪問文件系統。
stringJSONRDD = sc.parallelize(("""
{ "id": "123",
"name": "Katie",
"age": 19,
"eyeColor": "brown"
}""",
"""{
"id": "234",
"name": "Michael",
"age": 22,
"eyeColor": "green"
}""",
"""{
"id": "345",
"name": "Simone",
"age": 23,
"eyeColor": "blue"
}""")
)
然后創建數據幀
swimmersJSON = spark.read.json(stringJSONRDD)
創建臨時表
swimmersJSON.createOrReplaceTempView("swimmersJSON")
希望這對你有幫助。 有關完整代碼,您可以參考此GitHub 存儲庫。
from pyspark.sql import SparkSession
from pyspark.sql.functions import col
from pyspark.sql.functions import explode
spark = SparkSession.builder.getOrCreate()
sc = spark.sparkContext
json_data = '{"results":[{"a":1,"b":2,"c":"name"},{"a":2,"b":5,"c":"foo"}]}'
json_rdd = sc.parallelize([json_data])
df = spark.read.json(json_rdd)
df =df.withColumn("results", explode(df.results)).select(
col("results.a").alias("a"),
col("results.b").alias("b"),
col("results.c").alias("c") )
df.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.