PassTest Associate-Developer-Apache-Spark問題集179問でDatabricks Certificationを確実実践 [Q75-Q90]

Share

PassTest Associate-Developer-Apache-Spark問題集179問でDatabricks Certificationを確実実践

リアル最新Associate-Developer-Apache-Spark試験問題Associate-Developer-Apache-Spark問題集

質問 75
Which of the following statements about Spark's configuration properties is incorrect?

  • A. The default value for spark.sql.autoBroadcastJoinThreshold is 10MB.
  • B. The maximum number of tasks that an executor can process at the same time is controlled by the spark.executor.cores property.
  • C. The default number of partitions returned from certain transformations can be controlled by the spark.default.parallelism property.
  • D. The maximum number of tasks that an executor can process at the same time is controlled by the spark.task.cpus property.
  • E. The default number of partitions to use when shuffling data for joins or aggregations is 300.

正解: E

解説:
Explanation
The default number of partitions to use when shuffling data for joins or aggregations is 300.
No, the default value of the applicable property spark.sql.shuffle.partitions is 200.
The maximum number of tasks that an executor can process at the same time is controlled by the spark.executor.cores property.
Correct, see below.
The maximum number of tasks that an executor can process at the same time is controlled by the spark.task.cpus property.
Correct, the maximum number of tasks that an executor can process in parallel depends on both properties spark.task.cpus and spark.executor.cores. This is because the available number of slots is calculated by dividing the number of cores per executor by the number of cores per task. For more info specifically to this point, check out Spark Architecture | Distributed Systems Architecture.
More info: Configuration - Spark 3.1.2 Documentation

 

質問 76
The code block shown below should return a DataFrame with all columns of DataFrame transactionsDf, but only maximum 2 rows in which column productId has at least the value 2. Choose the answer that correctly fills the blanks in the code block to accomplish this.
transactionsDf.__1__(__2__).__3__

  • A. 1. filter
    2. col("productId") >= 2
    3. limit(2)
  • B. 1. where
    2. transactionsDf[productId] >= 2
    3. limit(2)
  • C. 1. filter
    2. productId > 2
    3. max(2)
  • D. 1. where
    2. "productId" > 2
    3. max(2)
  • E. 1. where
    2. productId >= 2
    3. limit(2)

正解: A

解説:
Explanation
Correct code block:
transactionsDf.filter(col("productId") >= 2).limit(2)
The filter and where operators in gap 1 are just aliases of one another, so you cannot use them to pick the right answer.
The column definition in gap 2 is more helpful. The DataFrame.filter() method takes an argument of type Column or str. From all possible answers, only the one including col("productId") >= 2 fits this profile, since it returns a Column type.
The answer option using "productId" > 2 is invalid, since Spark does not understand that "productId" refers to column productId. The answer option using transactionsDf[productId] >= 2 is wrong because you cannot refer to a column using square bracket notation in Spark (if you are coming from Python using Pandas, this is something to watch out for). In all other options, productId is being referred to as a Python variable, so they are relatively easy to eliminate.
Also note that the question asks for the value in column productId being at least 2. This translates to a
"greater or equal" sign (>= 2), but not a "greater" sign (> 2).
Another thing worth noting is that there is no DataFrame.max() method. If you picked any option including this, you may be confusing it with the pyspark.sql.functions.max method. The correct method to limit the amount of rows is the DataFrame.limit() method.
More info:
- pyspark.sql.DataFrame.filter - PySpark 3.1.2 documentation
- pyspark.sql.DataFrame.limit - PySpark 3.1.2 documentation
Static notebook | Dynamic notebook: See test 3

 

質問 77
Which of the following code blocks returns a single-row DataFrame that only has a column corr which shows the Pearson correlation coefficient between columns predError and value in DataFrame transactionsDf?

  • A. transactionsDf.select(corr(col("predError"), col("value")).alias("corr")).first()
  • B. transactionsDf.select(corr(predError, value).alias("corr"))
  • C. transactionsDf.select(corr(col("predError"), col("value")).alias("corr")) (Correct)
  • D. transactionsDf.select(corr("predError", "value"))
  • E. transactionsDf.select(corr(["predError", "value"]).alias("corr")).first()

正解: C

解説:
Explanation
In difficulty, this question is above what you can expect from the exam. What this question NO:
wants to teach you, however, is to pay attention to the useful details included in the documentation.
pyspark.sql.corr is not a very common method, but it deals with Spark's data structure in an interesting way.
The command takes two columns over multiple rows and returns a single row - similar to an aggregation function. When examining the documentation (linked below), you will find this code example:
a = range(20)
b = [2 * x for x in range(20)]
df = spark.createDataFrame(zip(a, b), ["a", "b"])
df.agg(corr("a", "b").alias('c')).collect()
[Row(c=1.0)]
See how corr just returns a single row? Once you understand this, you should be suspicious about answers that include first(), since there is no need to just select a single row. A reason to eliminate those answers is that DataFrame.first() returns an object of type Row, but not DataFrame, as requested in the question.
transactionsDf.select(corr(col("predError"), col("value")).alias("corr")) Correct! After calculating the Pearson correlation coefficient, the resulting column is correctly renamed to corr.
transactionsDf.select(corr(predError, value).alias("corr"))
No. In this answer, Python will interpret column names predError and value as variable names.
transactionsDf.select(corr(col("predError"), col("value")).alias("corr")).first() Incorrect. first() returns a row, not a DataFrame (see above and linked documentation below).
transactionsDf.select(corr("predError", "value"))
Wrong. Whie this statement returns a DataFrame in the desired shape, the column will have the name corr(predError, value) and not corr.
transactionsDf.select(corr(["predError", "value"]).alias("corr")).first() False. In addition to first() returning a row, this code block also uses the wrong call structure for command corr which takes two arguments (the two columns to correlate).
More info:
- pyspark.sql.functions.corr - PySpark 3.1.2 documentation
- pyspark.sql.DataFrame.first - PySpark 3.1.2 documentation
Static notebook | Dynamic notebook: See test 3

 

質問 78
Which of the following describes how Spark achieves fault tolerance?

  • A. Spark is only fault-tolerant if this feature is specifically enabled via the spark.fault_recovery.enabled property.
  • B. If an executor on a worker node fails while calculating an RDD, that RDD can be recomputed by another executor using the lineage.
  • C. Spark builds a fault-tolerant layer on top of the legacy RDD data system, which by itself is not fault tolerant.
  • D. Due to the mutability of DataFrames after transformations, Spark reproduces them using observed lineage in case of worker node failure.
  • E. Spark helps fast recovery of data in case of a worker fault by providing the MEMORY_AND_DISK storage level option.

正解: B

解説:
Explanation
Due to the mutability of DataFrames after transformations, Spark reproduces them using observed lineage in case of worker node failure.
Wrong - Between transformations, DataFrames are immutable. Given that Spark also records the lineage, Spark can reproduce any DataFrame in case of failure. These two aspects are the key to understanding fault tolerance in Spark.
Spark builds a fault-tolerant layer on top of the legacy RDD data system, which by itself is not fault tolerant.
Wrong. RDD stands for Resilient Distributed Dataset and it is at the core of Spark and not a "legacy system".
It is fault-tolerant by design.
Spark helps fast recovery of data in case of a worker fault by providing the MEMORY_AND_DISK storage level option.
This is not true. For supporting recovery in case of worker failures, Spark provides "_2", "_3", and so on, storage level options, for example MEMORY_AND_DISK_2. These storage levels are specifically designed to keep duplicates of the data on multiple nodes. This saves time in case of a worker fault, since a copy of the data can be used immediately, vs. having to recompute it first.
Spark is only fault-tolerant if this feature is specifically enabled via the spark.fault_recovery.enabled property.
No, Spark is fault-tolerant by design.

 

質問 79
Which of the following code blocks returns all unique values of column storeId in DataFrame transactionsDf?

  • A. transactionsDf.distinct("storeId")
  • B. transactionsDf["storeId"].distinct()
  • C. transactionsDf.select(col("storeId").distinct())
  • D. transactionsDf.filter("storeId").distinct()
  • E. transactionsDf.select("storeId").distinct()
    (Correct)

正解: E

解説:
Explanation
distinct() is a method of a DataFrame. Knowing this, or recognizing this from the documentation, is the key to solving this question.
More info: pyspark.sql.DataFrame.distinct - PySpark 3.1.2 documentation Static notebook | Dynamic notebook: See test 2

 

質問 80
Which of the following describes a shuffle?

  • A. A shuffle is a process that compares data across partitions.
  • B. A shuffle is a process that is executed during a broadcast hash join.
  • C. A shuffle is a process that compares data across executors.
  • D. A shuffle is a process that allocates partitions to executors.
  • E. A shuffle is a Spark operation that results from DataFrame.coalesce().

正解: A

解説:
Explanation
A shuffle is a Spark operation that results from DataFrame.coalesce().
No. DataFrame.coalesce() does not result in a shuffle.
A shuffle is a process that allocates partitions to executors.
This is incorrect.
A shuffle is a process that is executed during a broadcast hash join.
No, broadcast hash joins avoid shuffles and yield performance benefits if at least one of the two tables is small in size (<= 10 MB by default). Broadcast hash joins can avoid shuffles because instead of exchanging partitions between executors, they broadcast a small table to all executors that then perform the rest of the join operation locally.
A shuffle is a process that compares data across executors.
No, in a shuffle, data is compared across partitions, and not executors.
More info: Spark Repartition & Coalesce - Explained (https://bit.ly/32KF7zS)

 

質問 81
The code block shown below should return a two-column DataFrame with columns transactionId and supplier, with combined information from DataFrames itemsDf and transactionsDf. The code block should merge rows in which column productId of DataFrame transactionsDf matches the value of column itemId in DataFrame itemsDf, but only where column storeId of DataFrame transactionsDf does not match column itemId of DataFrame itemsDf. Choose the answer that correctly fills the blanks in the code block to accomplish this.
Code block:
transactionsDf.__1__(itemsDf, __2__).__3__(__4__)

  • A. 1. select
    2. "transactionId", "supplier"
    3. join
    4. [transactionsDf.storeId!=itemsDf.itemId, transactionsDf.productId==itemsDf.itemId]
  • B. 1. join
    2. transactionsDf.productId==itemsDf.itemId, transactionsDf.storeId!=itemsDf.itemId
    3. filter
    4. "transactionId", "supplier"
  • C. 1. join
    2. transactionsDf.productId==itemsDf.itemId, how="inner"
    3. select
    4. "transactionId", "supplier"
  • D. 1. join
    2. [transactionsDf.productId==itemsDf.itemId, transactionsDf.storeId!=itemsDf.itemId]
    3. select
    4. "transactionId", "supplier"
  • E. 1. filter
    2. "transactionId", "supplier"
    3. join
    4. "transactionsDf.storeId!=itemsDf.itemId, transactionsDf.productId==itemsDf.itemId"

正解: D

解説:
Explanation
This question is pretty complex and, in its complexity, is probably above what you would encounter in the exam. However, reading the question carefully, you can use your logic skills to weed out the wrong answers here.
First, you should examine the join statement which is common to all answers. The first argument of the join() operator (documentation linked below) is the DataFrame to be joined with. Where join is in gap 3, the first argument of gap 4 should therefore be another DataFrame. For none of the questions where join is in the third gap, this is the case. So you can immediately discard two answers.
For all other answers, join is in gap 1, followed by .(itemsDf, according to the code block. Given how the join() operator is called, there are now three remaining candidates.
Looking further at the join() statement, the second argument (on=) expects "a string for the join column name, a list of column names, a join expression (Column), or a list of Columns", according to the documentation. As one answer option includes a list of join expressions (transactionsDf.productId==itemsDf.itemId, transactionsDf.storeId!=itemsDf.itemId) which is unsupported according to the documentation, we can discard that answer, leaving us with two remaining candidates.
Both candidates have valid syntax, but only one of them fulfills the condition in the question "only where column storeId of DataFrame transactionsDf does not match column itemId of DataFrame itemsDf". So, this one remaining answer option has to be the correct one!
As you can see, although sometimes overwhelming at first, even more complex questions can be figured out by rigorously applying the knowledge you can gain from the documentation during the exam.
More info: pyspark.sql.DataFrame.join - PySpark 3.1.2 documentation
Static notebook | Dynamic notebook: See test 3

 

質問 82
Which of the following code blocks reads in the parquet file stored at location filePath, given that all columns in the parquet file contain only whole numbers and are stored in the most appropriate format for this kind of data?

  • A. 1.spark.read.schema([
    2. StructField("transactionId", IntegerType(), True),
    3. StructField("predError", IntegerType(), True)
    4. ]).load(filePath, format="parquet")
  • B. 1.spark.read.schema(
    2. StructType([
    3. StructField("transactionId", StringType(), True),
    4. StructField("predError", IntegerType(), True)]
    5. )).parquet(filePath)
  • C. 1.spark.read.schema(
    2. StructType([
    3. StructField("transactionId", IntegerType(), True),
    4. StructField("predError", IntegerType(), True)]
    5. )).format("parquet").load(filePath)
  • D. 1.spark.read.schema(
    2. StructType(
    3. StructField("transactionId", IntegerType(), True),
    4. StructField("predError", IntegerType(), True)
    5. )).load(filePath)
  • E. 1.spark.read.schema([
    2. StructField("transactionId", NumberType(), True),
    3. StructField("predError", IntegerType(), True)
    4. ]).load(filePath)

正解: C

解説:
Explanation
The schema passed into schema should be of type StructType or a string, so all entries in which a list is passed are incorrect.
In addition, since all numbers are whole numbers, the IntegerType() data type is the correct option here.
NumberType() is not a valid data type and StringType() would fail, since the parquet file is stored in the "most appropriate format for this kind of data", meaning that it is most likely an IntegerType, and Spark does not convert data types if a schema is provided.
Also note that StructType accepts only a single argument (a list of StructFields). So, passing multiple arguments is invalid.
Finally, Spark needs to know which format the file is in. However, all of the options listed are valid here, since Spark assumes parquet as a default when no file format is specifically passed.
More info: pyspark.sql.DataFrameReader.schema - PySpark 3.1.2 documentation and StructType - PySpark 3.1.2 documentation

 

質問 83
Which of the following code blocks returns all unique values across all values in columns value and productId in DataFrame transactionsDf in a one-column DataFrame?

  • A. tranactionsDf.select('value').join(transactionsDf.select('productId'), col('value')==col('productId'),
    'outer')
  • B. transactionsDf.select('value', 'productId').distinct()
  • C. transactionsDf.agg({'value': 'collect_set', 'productId': 'collect_set'})
  • D. transactionsDf.select(col('value'), col('productId')).agg({'*': 'count'})
  • E. transactionsDf.select('value').union(transactionsDf.select('productId')).distinct()

正解: E

解説:
Explanation
transactionsDf.select('value').union(transactionsDf.select('productId')).distinct() Correct. This code block uses a common pattern for finding the unique values across multiple columns: union and distinct. In fact, it is so common that it is even mentioned in the Spark documentation for the union command (link below).
transactionsDf.select('value', 'productId').distinct()
Wrong. This code block returns unique rows, but not unique values.
transactionsDf.agg({'value': 'collect_set', 'productId': 'collect_set'}) Incorrect. This code block will output a one-row, two-column DataFrame where each cell has an array of unique values in the respective column (even omitting any nulls).
transactionsDf.select(col('value'), col('productId')).agg({'*': 'count'}) No. This command will count the number of rows, but will not return unique values.
transactionsDf.select('value').join(transactionsDf.select('productId'), col('value')==col('productId'), 'outer') Wrong. This command will perform an outer join of the value and productId columns. As such, it will return a two-column DataFrame. If you picked this answer, it might be a good idea for you to read up on the difference between union and join, a link is posted below.
More info: pyspark.sql.DataFrame.union - PySpark 3.1.2 documentation, sql - What is the difference between JOIN and UNION? - Stack Overflow Static notebook | Dynamic notebook: See test 3

 

質問 84
The code block displayed below contains an error. The code block should write DataFrame transactionsDf as a parquet file to location filePath after partitioning it on column storeId. Find the error.
Code block:
transactionsDf.write.partitionOn("storeId").parquet(filePath)

  • A. The operator should use the mode() option to configure the DataFrameWriter so that it replaces any existing files at location filePath.
  • B. The partitioning column as well as the file path should be passed to the write() method of DataFrame transactionsDf directly and not as appended commands as in the code block.
  • C. The partitionOn method should be called before the write method.
  • D. Column storeId should be wrapped in a col() operator.
  • E. No method partitionOn() exists for the DataFrame class, partitionBy() should be used instead.

正解: E

解説:
Explanation
No method partitionOn() exists for the DataFrame class, partitionBy() should be used instead.
Correct! Find out more about partitionBy() in the documentation (linked below).
The operator should use the mode() option to configure the DataFrameWriter so that it replaces any existing files at location filePath.
No. There is no information about whether files should be overwritten in the question.
The partitioning column as well as the file path should be passed to the write() method of DataFrame transactionsDf directly and not as appended commands as in the code block.
Incorrect. To write a DataFrame to disk, you need to work with a DataFrameWriter object which you get access to through the DataFrame.writer property - no parentheses involved.
Column storeId should be wrapped in a col() operator.
No, this is not necessary - the problem is in the partitionOn command (see above).
The partitionOn method should be called before the write method.
Wrong. First of all partitionOn is not a valid method of DataFrame. However, even assuming partitionOn would be replaced by partitionBy (which is a valid method), this method is a method of DataFrameWriter and not of DataFrame. So, you would always have to first call DataFrame.write to get access to the DataFrameWriter object and afterwards call partitionBy.
More info: pyspark.sql.DataFrameWriter.partitionBy - PySpark 3.1.2 documentation Static notebook | Dynamic notebook: See test 3

 

質問 85
Which of the following code blocks returns about 150 randomly selected rows from the 1000-row DataFrame transactionsDf, assuming that any row can appear more than once in the returned DataFrame?

  • A. transactionsDf.resample(0.15, False, 3142)
  • B. transactionsDf.sample(0.85, 8429)
  • C. transactionsDf.sample(0.15, False, 3142)
  • D. transactionsDf.sample(True, 0.15, 8261)
  • E. transactionsDf.sample(0.15)

正解: D

解説:
Explanation
Answering this question correctly depends on whether you understand the arguments to the DataFrame.sample() method (link to the documentation below). The arguments are as follows:
DataFrame.sample(withReplacement=None, fraction=None, seed=None).
The first argument withReplacement specified whether a row can be drawn from the DataFrame multiple times. By default, this option is disabled in Spark. But we have to enable it here, since the question asks for a row being able to appear more than once. So, we need to pass True for this argument.
About replacement: "Replacement" is easiest explained with the example of removing random items from a box. When you remove those "with replacement" it means that after you have taken an item out of the box, you put it back inside. So, essentially, if you would randomly take 10 items out of a box with 100 items, there is a chance you take the same item twice or more times. "Without replacement" means that you would not put the item back into the box after removing it. So, every time you remove an item from the box, there is one less item in the box and you can never take the same item twice.
The second argument to the withReplacement method is fraction. This referes to the fraction of items that should be returned. In the question we are asked for 150 out of 1000 items - a fraction of 0.15.
The last argument is a random seed. A random seed makes a randomized processed repeatable. This means that if you would re-run the same sample() operation with the same random seed, you would get the same rows returned from the sample() command. There is no behavior around the random seed specified in the question. The varying random seeds are only there to confuse you!
More info: pyspark.sql.DataFrame.sample - PySpark 3.1.1 documentation
Static notebook | Dynamic notebook: See test 1

 

質問 86
Which of the following statements about RDDs is incorrect?

  • A. RDDs are immutable.
  • B. RDDs are great for precisely instructing Spark on how to do a query.
  • C. The high-level DataFrame API is built on top of the low-level RDD API.
  • D. RDD stands for Resilient Distributed Dataset.
  • E. An RDD consists of a single partition.

正解: E

解説:
Explanation
An RDD consists of a single partition.
Quite the opposite: Spark partitions RDDs and distributes the partitions across multiple nodes.

 

質問 87
Which of the following code blocks returns a DataFrame with approximately 1,000 rows from the 10,000-row DataFrame itemsDf, without any duplicates, returning the same rows even if the code block is run twice?

  • A. itemsDf.sample(fraction=1000, seed=98263)
  • B. itemsDf.sample(fraction=0.1)
  • C. itemsDf.sample(fraction=0.1, seed=87238)
  • D. itemsDf.sample(withReplacement=True, fraction=0.1, seed=23536)
  • E. itemsDf.sampleBy("row", fractions={0: 0.1}, seed=82371)

正解: C

解説:
Explanation
itemsDf.sample(fraction=0.1, seed=87238)
Correct. If itemsDf has 10,000 rows, this code block returns about 1,000, since DataFrame.sample() is never guaranteed to return an exact amount of rows. To ensure you are not returning duplicates, you should leave the withReplacement parameter at False, which is the default. Since the question specifies that the same rows should be returned even if the code block is run twice, you need to specify a seed. The number passed in the seed does not matter as long as it is an integer.
itemsDf.sample(withReplacement=True, fraction=0.1, seed=23536)
Incorrect. While this code block fulfills almost all requirements, it may return duplicates. This is because withReplacement is set to True.
Here is how to understand what replacement means: Imagine you have a bucket of 10,000 numbered balls and you need to take 1,000 balls at random from the bucket (similar to the problem in the question). Now, if you would take those balls with replacement, you would take a ball, note its number, and put it back into the bucket, meaning the next time you take a ball from the bucket there would be a chance you could take the exact same ball again. If you took the balls without replacement, you would leave the ball outside the bucket and not put it back in as you take the next 999 balls.
itemsDf.sample(fraction=1000, seed=98263)
Wrong. The fraction parameter needs to have a value between 0 and 1. In this case, it should be 0.1, since
1,000/10,000 = 0.1.
itemsDf.sampleBy("row", fractions={0: 0.1}, seed=82371)
No, DataFrame.sampleBy() is meant for stratified sampling. This means that based on the values in a column in a DataFrame, you can draw a certain fraction of rows containing those values from the DataFrame (more details linked below). In the scenario at hand, sampleBy is not the right operator to use because you do not have any information about any column that the sampling should depend on.
itemsDf.sample(fraction=0.1)
Incorrect. This code block checks all the boxes except that it does not ensure that when you run it a second time, the exact same rows will be returned. In order to achieve this, you would have to specify a seed.
More info:
- pyspark.sql.DataFrame.sample - PySpark 3.1.2 documentation
- pyspark.sql.DataFrame.sampleBy - PySpark 3.1.2 documentation
- Types of Samplings in PySpark 3. The explanations of the sampling... | by Pinar Ersoy | Towards Data Science

 

質問 88
Which of the following is not a feature of Adaptive Query Execution?

  • A. Split skewed partitions into smaller partitions to avoid differences in partition processing time.
  • B. Replace a sort merge join with a broadcast join, where appropriate.
  • C. Coalesce partitions to accelerate data processing.
  • D. Reroute a query in case of an executor failure.
  • E. Collect runtime statistics during query execution.

正解: D

解説:
Explanation
Reroute a query in case of an executor failure.
Correct. Although this feature exists in Spark, it is not a feature of Adaptive Query Execution. The cluster manager keeps track of executors and will work together with the driver to launch an executor and assign the workload of the failed executor to it (see also link below).
Replace a sort merge join with a broadcast join, where appropriate.
No, this is a feature of Adaptive Query Execution.
Coalesce partitions to accelerate data processing.
Wrong, Adaptive Query Execution does this.
Collect runtime statistics during query execution.
Incorrect, Adaptive Query Execution (AQE) collects these statistics to adjust query plans. This feedback loop is an essential part of accelerating queries via AQE.
Split skewed partitions into smaller partitions to avoid differences in partition processing time.
No, this is indeed a feature of Adaptive Query Execution. Find more information in the Databricks blog post linked below.
More info: Learning Spark, 2nd Edition, Chapter 12, On which way does RDD of spark finish fault-tolerance?
- Stack Overflow, How to Speed up SQL Queries with Adaptive Query Execution

 

質問 89
The code block displayed below contains an error. The code block should produce a DataFrame with color as the only column and three rows with color values of red, blue, and green, respectively.
Find the error.
Code block:
1.spark.createDataFrame([("red",), ("blue",), ("green",)], "color")
Instead of calling spark.createDataFrame, just DataFrame should be called.

  • A. The commas in the tuples with the colors should be eliminated.
  • B. The colors red, blue, and green should be expressed as a simple Python list, and not a list of tuples.
  • C. The "color" expression needs to be wrapped in brackets, so it reads ["color"].
  • D. Instead of color, a data type should be specified.

正解: C

解説:
Explanation
Correct code block:
spark.createDataFrame([("red",), ("blue",), ("green",)], ["color"])
The createDataFrame syntax is not exactly straightforward, but luckily the documentation (linked below) provides several examples on how to use it. It also shows an example very similar to the code block presented here which should help you answer this question correctly.
More info: pyspark.sql.SparkSession.createDataFrame - PySpark 3.1.2 documentation Static notebook | Dynamic notebook: See test 2

 

質問 90
......

Associate-Developer-Apache-Spark別格な問題集で最上級の成績にさせるAssociate-Developer-Apache-Spark問題:https://www.passtest.jp/Databricks/Associate-Developer-Apache-Spark-shiken.html

手に入れよう!最新Associate-Developer-Apache-Spark認定の有効な試験問題集解答:https://drive.google.com/open?id=1m57W5t3NZrPTp2fFrOLlrHEMG5s-8gyZ